Keras创建ANN模型的四种方法

简介: 这里以MNIST数据集来介绍Keras创建人工神经网络模型的四种方法

@toc

这里以MNIST数据集来介绍Keras创建人工神经网络模型的四种方法

1、将参数传递给tf.keras.Sequential

import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense, Flatten
mnist=tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mnist.load_data()
epochs=10#epochs变量存储将数据输入给模型的次数
batch_size=32
#将所有数据点归一化为0~1范围的浮点值,数据类型为float32,标签y需要转换为int64

train_x,test_x=tf.cast(train_x/255.0,tf.float32),tf.cast(test_x/255.0,tf.float32)
train_y,test_y=tf.cast(train_y,tf.int64),tf.cast(test_y,tf.int64)

模型定义如下(注意观察祝贺在模型定义中进行层列表的传递):

  • Flatten接收28*28(即2D)像素的图像输入,并生成一个784(即1D)的向量(下一个Dense层为一维)
  • Dense是一个全连接层,表示在两个网络层中任意一堆神经元都存在连接关系。下例有512个神经元,其输入通过ReLU(非线性)激活函数传递。
  • Dropout会随机关闭上一层的一小部分神经元(本例随机概率设为0.2).这样做是为了防止任何特定的神经元变得过于强大,而导致模型与数据过拟合,从而影响模型对测试数据度量的准确性。
  • 最后的Dense层包含一个softmax激活函数,该函数为每一个可能的输出(10个神经元)分配概率。
#模型定义
model1=tf.keras.models.Sequential([
    Flatten(),
    Dense(512,activation=tf.nn.relu),
    Dropout(0.2),
    Dense(10,activation=tf.nn.softmax)
])
#编译模型
optimiser=tf.keras.optimizers.Adam()
model1.compile(optimiser=optimiser,loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
#训练模型
model1.fit(train_x,train_y,batch_size=batch_size,epochs=epochs)
Train on 60000 samples
Epoch 1/10
60000/60000 [==============================] - 6s 100us/sample - loss: 0.2228 - accuracy: 0.9347
Epoch 2/10
60000/60000 [==============================] - 5s 82us/sample - loss: 0.1102 - accuracy: 0.9678
Epoch 3/10
60000/60000 [==============================] - 5s 82us/sample - loss: 0.0857 - accuracy: 0.9760
Epoch 4/10
60000/60000 [==============================] - 5s 84us/sample - loss: 0.0741 - accuracy: 0.9800
Epoch 5/10
60000/60000 [==============================] - 5s 83us/sample - loss: 0.0628 - accuracy: 0.9838
Epoch 6/10
60000/60000 [==============================] - 5s 82us/sample - loss: 0.0553 - accuracy: 0.9852
Epoch 7/10
60000/60000 [==============================] - 5s 83us/sample - loss: 0.0493 - accuracy: 0.9873
Epoch 8/10
60000/60000 [==============================] - 5s 85us/sample - loss: 0.0456 - accuracy: 0.9883
Epoch 9/10
60000/60000 [==============================] - 5s 83us/sample - loss: 0.0408 - accuracy: 0.9894
Epoch 10/10
60000/60000 [==============================] - 5s 84us/sample - loss: 0.0384 - accuracy: 0.9899

Out[8]:

<tensorflow.python.keras.callbacks.History at 0x2e500325448>
#模型评估
model1.evaluate(test_x,test_y)

image-20220708210725671

查看模型结构

# 查看模型结构
model1.summary()

image-20220708210802640

数字401920的计算方法为

$$ (28\times 28)\times 512(dense\_2层)=784\times 512=401408 $$

401408+512(每个dense_2层神经元的偏置单元)=401920

5130的计算方法为:

$$ 512 \times10+10=5130 $$

2、用tf.keras.Sequential的.add方法

model2 = tf.keras.models.Sequential();
model2.add(tf.keras.layers.Flatten())
model2.add(tf.keras.layers.Dense(512, activation='relu'))
model2.add(tf.keras.layers.Dropout(0.2))
model2.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))
optimiser = tf.keras.optimizers.Adam()
model2.compile (optimizer= optimiser, loss='sparse_categorical_crossentropy', metrics = ['accuracy'])
model2.fit(train_x, train_y, batch_size = batch_size, epochs=epochs)
model2.evaluate(test_x, test_y)

3、使用Keras函数式API

import tensorflow as tf
mnist=tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mnist.load_data()
train_x,test_x=train_x/255.0,test_x/255.0
epochs=10
#模型定义
inputs=tf.keras.Input(shape=(28,28))#返回一个占位符张量
x=tf.keras.layers.Flatten()(inputs)
x=tf.keras.layers.Dense(512,activation='relu',name='d1')(x)
x=tf.keras.layers.Dropout(0.2)(x)
predictions=tf.keras.layers.Dense(10,activation=tf.nn.softmax,name='d2')(x)

model3=tf.keras.Model(inputs=inputs,outputs=predictions)
#编译模型
optimiser=tf.keras.optimizers.Adam()
model3.compile(optimiser=optimiser,loss='sparse_categorical_crossentropy',
               metrics=['accuracy'])
#训练模型
model3.fit(train_x,train_y,batch_size=32,epochs=epochs)

image-20220708211612104

#评估模型
loss,accuracy=model3.evaluate(test_x,test_y)
print('loss:',loss)
print('accuracy:',accuracy)

image-20220708211557912

4、子类化tf.keras.Model对象

首先,使用构造函数(.__init__())分别对神经层进行声明和命名

然后,在call()方法中以函数形式将神经层连接在一起。该方法封装了前向传播:

import tensorflow as tf
class MyModel(tf.keras.Model):
    def __init__(self,num_class=10):
        super(MyModel,self).__init__()
        #定义神经层
        inputs=tf.keras.Input(shape=(28,28))#返回一个占位符张量
        self.x0=tf.keras.layers.Flatten()
        self.x1=tf.keras.layers.Dense(512,activation='relu',name='d1')
        self.x2=tf.keras.layers.Dropout(0.2)
        self.predictions=tf.keras.layers.Dense(10,activation=tf.nn.softmax,name='d2')
        
    def call(self,inputs):
        #定义前向传播
        #使用先前在__init__中定义的神经层
        x=self.x0(inputs)
        x=self.x1(x)
        x=self.x2(x)
        return self.predictions(x)
model4=MyModel()
mnist=tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mnist.load_data()
train_x, test_x = train_x/255.0, test_x/255.0
epochs=10
batch_size=32
steps_per_epoch=len(train_x)//batch_size
print(steps_per_epoch)
epochs=10

image-20220708211909625

#编译模型
model4.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])
#训练模型
model4.fit(train_x,train_y,batch_size=batch_size,epochs=epochs)

image-20220708211942347

#查看模型摘要
model4.summary()

image-20220708212002056

#模型评估
loss,accuracy=model4.evaluate(test_x,test_y)
print('loss:',loss)
print('accuracy:',accuracy)

image-20220708212017790

目录
相关文章
|
缓存 PyTorch 数据处理
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
733 0
基于Pytorch的PyTorch Geometric(PYG)库构造个人数据集
|
5月前
|
机器学习/深度学习 算法 数据可视化
模型训练(Model Training)
模型训练(Model Training)是指使用数据集对模型进行训练,使其能够从数据中学习到特征和模式,进而完成特定的任务。在深度学习领域,通常使用反向传播算法来训练模型,其中模型会根据数据集中的输入和输出,不断更新其参数,以最小化损失函数。
115 1
|
9月前
|
API 算法框架/工具
越来越火的tf.keras模型,这三种构建方式记住了,你就是大佬!!!
越来越火的tf.keras模型,这三种构建方式记住了,你就是大佬!!!
|
9月前
|
机器学习/深度学习 API 算法框架/工具
一、线性回归的两种实现方式:(一)keras实现
一、线性回归的两种实现方式:(一)keras实现
|
9月前
|
PyTorch 算法框架/工具 Python
针对pytorch中的CRF不存在属性
为了更加便捷地使用CRF模块,有大佬真们对CRF封装起来,方便大家使用。关于CRF的左右,本博客不具体介绍,有兴趣的朋友可以百度查找。
206 0
|
11月前
|
机器学习/深度学习 存储 PyTorch
怎么调用pytorch中mnist数据集
怎么调用pytorch中mnist数据集
146 0
|
11月前
|
机器学习/深度学习 算法框架/工具 Python
Keras-3-实例2-多分类问题
Keras-3-实例2-多分类问题
|
12月前
|
机器学习/深度学习 Web App开发 人工智能
一个项目帮你了解数据集蒸馏Dataset Distillation
一个项目帮你了解数据集蒸馏Dataset Distillation
184 0
|
移动开发 算法 算法框架/工具
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
|
机器学习/深度学习 Python
判别式模型(discriminative model)和生成模型(generative model)
已知输入变量x,判别模型(discriminative model)通过求解条件概率分布P(y|x)或者直接计算y的值来预测y。生成模型(generative model)通过对观测值和标注数据计算联合概率分布P(x,y)来达到判定估算y的目的。
329 0
判别式模型(discriminative model)和生成模型(generative model)