我们对以上六步进行说明:
model = tf.keras.models.Sequential([网络结构]) #描述各层网络(相当于一个容器,封装了一个神经网络结构,在Sequential中要描述从输入层到输出层每一层的网络结构)
拉直层: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()
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 = 学习率)
'adam' or tf.keras.optimizers.Adam(lr = 学习率,beta_1=0.9,beta_2=0.999)
loss 可选:
'mse' or tf.keras.losses.MeanSquaredError()
'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits = False) #神经网络的输出结果经过了概率分布则from_logits = Flase,如果没有经过概率分布则为True
Metrics 可选:
'accuracy':y_和y都是数值,如y_=[1],y=[1]
'categorical_accuracy':y_和y都是独热码(概率分布),如y_=[0,1,0],y=[0.256,0.695,0.048]
'sparse_categorical_crossentropy':y_是数值,y是独热码,如y_=[1],y=[0.256,0.695,0.048]
model.fit(训练集的输入特征,训练集的标签,
batch_size = ,epochs = ,
validation_data = (测试集的输入特征,测试集的标签),
validation_split = 从训练集划分多少比例给测试集,
validation_freq = 多少次epoch测试一次)
model.summary() #打印出网络的结构和参数统计,每一层参数个数以及总个数
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)
# 使用随机化种子,打乱数据集
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
# 3个神经元,激活函数用softmax,采用l2正则
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
# 配置训练方法 优化器选用SGD优化器,设置学习率为0.1,选用SparseCategoricalCrossentropy作为损失函数
# 因为鸢尾花数据集中的标签为0 1 2,是数值,神经网络的前向传播是概率分布,所以metrics选取'sparse_categorical_accuracy' 作为评测指标
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
# 执行训练过程,输入训练特征和标签,以及每一次喂入神经网络多少对特征和标签
# epochs写数据集迭代循环多少次,validation_split告知从训练集中选择20%的数据作为测试集
# validation_freq表示每迭代20次训练集要在测试集中验证一次准确率
model.summary()
# 用summary打印出网络结构和参数统计
epoch是要设定的一个参数,可以设定为从1到无穷大,一个epoch意味着训练集中每一个样本都参与训练了一次。
比如训练集有50000个样本,而我设定的batch size是50,也就是说每50个样本才更新一次参数,那么也就意味着一个epoch里会提取1000次bach,这样才会把每个样本都提取了一遍,更新了1000此参数。这是一个epoch里做的,一次类推,我要设定2000个epoch意味着把这个过程重复2000次。也就是训练集里的每个样本都被提取了2000次。1
1 ↩︎