Tensorflow API:tf.keras
搭建网络八股import
引入相关模块train, test
告知要喂入网络的输入集以及测试集model = tf.keras.models.Sequential
搭建网络结构,逐层描述网络结构,相当于走了一遍前向传播model.compile
配置训练方法,选择优化器,损失函数,评测指标model.fit
执行训练过程,告知训练集和测试集的输入特征和标签,告知batch的大小,告知要进行多少次迭代model.summary
打印出网络的结构和参数统计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) # 参数在询问输入是不是原始输入(有没有经过概率分布处理过)
Metrics可选:
‘accuracy’: y_和y都是数值,如y_=[1] y=[1]
‘categorical_accuracy’: y_和y都是独热码(概率分布),如y_=[0, 1, 0] y=[0.256, 0.695, 0,048]
‘sparse_catagorical_accuracy’: y_是数值,y是独热码(概率分布),如y=[1] y=[0.256, 0.695, 0,048]
model.fit(训练集的输入特征, 训练集的标签, batch_size= , epochs= ,
validation_data=(测试集的输入特征, 测试集的标签),
validation_split=从训练集划分多少比例给测试集,
validation_freq=多少次epoch测试一次)
import tensorflow as tf
mnist = tf.keras.datasets.fashion_mnist # 调用了mnist里的fashion测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0 # 将0~255之间的灰度值转化为0~1之间的灰度值,把输入值变小更易于神经网络的吸收
model = tf.keras.models.Sequential([ # 定义网络结构
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile( # 设置训练参数
potimizer='adadela',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy']
)
model.fit(x_train, y_train, epochs=30, validation_data=(x_test, y_test), validation_freq=2) # 模型训练
model.summary()
用Sequential只能搭建出上层输出就是下层输入的神经网络结构,没有办法搭建出带有跳连等复杂结构的神经网络,这时我们可以选择用类class搭建神经网络结构
import
引入相关模块train, test
告知要喂入网络的输入集以及测试集class MyModel(Model) model = MyModel
model.compile
配置训练方法,选择优化器,损失函数,评测指标model.fit
执行训练过程,告知训练集和测试集的输入特征和标签,告知batch的大小,告知要进行多少次迭代model.summary
打印出网络的结构和参数统计可以用class封装一个神经网络结构
class MyModel(Model): # Model表示继承了TensorFlow的Model类
def __init__(self):
super(MyModel, self).__init__()
# 这里定义网络结构块
def call(self, x):
# 这里调用网络结构块,实现前向传播
return y
model = MyModel()
举个例子:
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
self.d1 = Dense(3) # d1是对这一层起的名字,每一层都用self.引导
def call(self, x):
y = self.d1(x)
return y
model = IrisModel()