TF2.0-神经网络模型搭建6步法,Sequential顺序神经网络结构,Class类搭建带连跳网络结构含实践
Posted MADE Club
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TF2.0-神经网络模型搭建6步法,Sequential顺序神经网络结构,Class类搭建带连跳网络结构含实践相关的知识,希望对你有一定的参考价值。
目录
〇.引言:
Ⅰ.神经网络模型六步搭建法[Sequential搭建]
导包-数据-Sequential构建-compile配置-fit训练-summary
Ⅱ.六步法中重要函数的超参数设置及可选项
tf.keras.models.Sequential-拉直层,全连接层,卷积层,LSTM层
model.compile(optimizer=优化器,loss=损失率,metrics=[’准确率'])
model.fit(...)
model.summary()
Ⅲ.CLASS类搭建神经网络
Ⅳ.实践-Mnist&Fashion
引言:
PARTⅠ:神经网络——六步搭建法
import tensorflow as tf
from sklearn import datasets
import numpy as np
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
# 打乱
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
# 使用softmax 输出是概率分布
model = tf.keras.Sequential([
tf.keras.layers.Dense(3,activation ='softmax',
kernel_regularizer =tf.keras.regularizers.l2())
])
# 因为鸢尾花数据集给的标签是0,1,3
# 我们上述使用softmax前向传播的输出是概率分布
# 所以使用评价指数sparse_categorical_accuracy
model.compile(optimizer='sgd',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
model.fit(x_train,y_train,batch_size=32,
epochs=500,validation_split=0.2,validation_freq=20)
# 第六步:查看模型参数等
model.summary()
上述就是通过keras.Sequentical实现的iris三分类
按照六步法,清晰明了!
PART Ⅱ :六步法中的重要函数
步骤三:
搭建网络网络结构的可选项
步骤四:
compile配置网络选择优化器等
步骤五:
执行训练fit
步骤六:
查看网络结构和超参数
上述关于激活函数,损失函数,优化器,正则化等的原理和选择建议参见:
PART Ⅲ :Class类搭建神经网络
在PARTⅠ中,使用的是Sequentical来搭建神经网络:
通式如下:
# 继承tf的Model类
class Mymodel(Model):
# 类里要定义两个函数:
# ①__init__初始化函数:定义所需网络结构块
# ② call()函数:写出前向传播
def __init__(self):
super(Mymodel,self).__init__()
# 给出搭建神经网络时所需的各种网络结构块
def call(self,x):
# 调用网络结构块,实现前向传播
return y
model = Mymodel()
对于PARTⅠ中实现的鸢尾花Sequentical转换为class构建:
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense
class IrisModel(Model):
def __init__(self):
super(IrisModel,self).__init__()
self.d1 = Dense(3,activation='sigmoid',
kernel_regularizer=tf.keras.regularizers.l2())
def call(self,x):
y = self.d1(x)
return y
model2 = IrisModel()
和前一种方式构建的网络结构以及参数量均一样。
接下来是两个实践:
MNIST数据集,Fashion数据集
均都有两种方式(Sequential和class)搭建。
【文中只放了Sequential代码,类class代码见原文链接。】
实践一:MNIST-手写数字数据集
MNIST数据集:
共有7万张图片,均为28*28像素点的灰度手写数字图片
训练:6万张0~9的手写数字图片和标签
测试:1万张0~9的手写数字图片和标签
# 步骤一和步骤二
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras import layers
# 该数据集可以使用load_data()中读取训练集和测试集
(x_train,y_train),(x_test,y_test) = tf.keras.datasets.mnist.load_data()
# 0:纯白 , 255:纯黑,特征要进行归一化 ,把输入特征的数值变小更适合神经网络吸收
x_train,x_test = x_train/255.0,x_test/255.0
#步骤三:建模
model = Sequential([
# 送入神经网络要先把数据拉直一维数组
# 将28*28 784个像素点的灰度作为输入特征送入神经网络
layers.Flatten(),
# 第一层网络:128个神经元
layers.Dense(128,activation = 'relu'),
# 10个类,多分类,使用softmax
layers.Dense(10,activation='softmax')
])
# 步骤四:compile
model.compile(optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
# 步骤五:训练
model.fit(x_train,y_train,batch_size=32,epochs=5,
validation_data=(x_test,y_test),validation_freq=1)
# 步骤六:测试集
model.summary()
实践二:Fashion-衣裤数据集
FASHION数据集:
共有7万张图片,均为28*28像素点的衣裤图片
训练:6万张衣裤图片和标签
测试:1万张衣裤图片和标签
import tensorflow as tf
fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = fashion.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()
本文脑图【高清图见原文链接】:
总结:
采用六步法搭建神经网络模型直接明了又简单,是基本要掌握的方法。
(提取码:bayn)
以上是关于TF2.0-神经网络模型搭建6步法,Sequential顺序神经网络结构,Class类搭建带连跳网络结构含实践的主要内容,如果未能解决你的问题,请参考以下文章
TF2.0:翻译模型:恢复保存的模型时出错:检查点(根)中未解析的对象.optimizer.iter:属性
tf2.0 Keras:使用 RNN 的自定义张量流代码时无法保存权重
使用 TF2.0 训练 RNN 的每次迭代逐渐增加内存使用量