目录
model = tf.keras.models.Sequential([网络结构]) #描述各层网络
model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"])
class MyModel(Model) model = MyModel
六步
- import
- train, test
- model = tf.keras.models.Sequential:描述网络内部的结构,相当于走了一遍前向传播
- model.compile 配置训练方法,告知训练时选择哪种优化器,选择哪个损失函数,选择哪种评测指标
- model.fit 在fit中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
- model.summary()打印出网络的结构和参数统计
model = tf.keras.models.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(filter=卷积核个数, kernel_size=卷积&尺寸,stride =卷积步长, padding="valid" or "same")
LSTM层: tf.keras.layers.LSTM()
model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"])
Optimizer可选∶
sgd or t.keras.optimizers.SGD(r=学习率,momentum=动量参数)
'adagrad or tf. keras.optimizers.Adagrad (Ir=学习率
)'adadelta'or tf.keras.optimizers.Adadelta(r=学习率)
'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)
如果输出不满足概率分布的话,这里要写true
Metrics可选∶
accuracy∶y_和y都是数值.y_=[1] y=[1]
'categorical_accuracy'∶y_和y都是独热码(概率分布),如y_=[0.1.0] y=[0.256.0.695.0048]
'sparse_ categorical_accuracy∶y_是数值, y是独热码(概率分布),如y_=[1], y=[0.256,0.6950048](y_是真实值,y是预测的结果值)
model.fit
model.fit(训练集的输入特征,训练集的标签,
batch_size=, epochs=,
validation_data=(测试集的输入特征,测试集的标签),
validation_split=从训练集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
model.summary()
class MyModel(Model) model = MyModel
用 Sequential可以搭建出上层输出就是下层输入的顺序网络结构,但是无法写出一些带有跳连的非顺序网络结构。可以选择用类class搭建神经网络结构。
class MyModel(Model):
#对 __init__() 方法的调用发生在实例被创建之后
def __init__:
super(MyModel, self).__init__()
#定义网络结构块
def call(self, x):
#调用网络结构块,实现前向传播
return y
model = MyModel()
init函数准备出搭建网络所需的各种积木,call函数调用__init__中搭建好的积木,实现前向传播