一、总纲(一般按照下面6步搭建)
-
import——导入相关模块
-
train,test——指定训练集与测试集
-
model = tf.keras.models.Sequential——在Sequential搭建神经网络,描述每层网络
-
model.compile——配置训练方法,优化器,损失函数,评测指标
-
model.fit——执行训练过程,告知训练集与测试集,设置batch,迭达多少次数据集
-
model.summary——用summary打印出网络的结构和参数统计
二、六步法详解
1、model = tf.keras.models.Squential([网络结构])#描述各层网络
网络结构举例:
拉直层:tf.keras.layers.Flatten() ##不含计算,将输入特征拉直变成一维数组
全连接层:tf.keras.layers.Dense(神经元个数,activation="激活函数", kernel_regularizer=哪种正则化)
activation(激活函数)可选:relu、softmax、sigmoid、tanh
kernel_regularizer(正则化)可选:tf.keras.regularizers.l1()、tf.keras.regularizers.l2()
卷积层:tf.keras.layers.Conv2D(filters = 卷积核个数, kernel_size = 卷积核尺寸,strides = 卷积步长, padding = "valid" or "same")
LSTM层:tf.keras.layers.LSTM()
2、model.compile(optimizer = 优化器, loss = 损失函数, metrics = ["准确率"])
Optimizer可选:(下面的后者可以使用超参数,初学建议直接用前面的)
'sgd' or tf.keras.optimizers.SGD(lr=学习率, momentum=动量参数)
'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率)
'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率, momentum=动量参数)
'adam' or tf.keras.optimizers.Adam(lr=学习率, beta_1=0.9, beta_2=0.99)
loss可选:(均方误差与交叉熵)
'mse' or tf.keras.losses.MeanSquaresError()
'sparse_categorical_crossentropy' or
tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
Metrics可选:(告知网络评测指标)
'accuracy':y_和y都是数值
'categorical_accuracy':y_和y都是独热码(概率分布)
'sparse_categorical_accuracy':y_是数值,y是独热码(概率分布)
3、model.fit(训练集的输入特征,训练集的标签,
batch_size=,epochs=,
validation_data=(测试集输入特征,测试集的标签),
validation_split=从训练集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
4、model.summary()打印出网络结构和参数统计
三、案例(鸢尾花分类用六步法实现)
import tensorflow as tf
import tensorflow.python.keras as keras
import numpy as np;
from sklearn import datasets ##加载训练数据集
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)
###设置全连接层,设置激活函数,设置正则化函数
model = keras.models.Sequential([
keras.layers.Dense(3, activation='softmax', kernel_regularizer=keras.regularizers.l2())
])
###设置学习率与优化器,设置交叉熵loss函数,设置评测标准
model.compile(optimizer='SGD',
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
###设置训练集,batch_size的数值尽量设为2的n次方 validation_split是划分多少作为测试,validation_freq是每20次评测一下
model.fit(x_train, y_train, batch_size=32, epochs=500,validation_split=0.2,validation_freq=20)
model.summary()