1.网络八股
本文主要使用Tensorflow的API;tf.keras搭建网络八股
主要分为六步法:
- import:导入相关的模块
- train,test:告知需要喂入网路的训练集和测试集是什么
- model = tf.keras.models.Sequential:在Sequential中搭建网络,逐层描述每层网络,相当于走了一遍前向传播
- model.compile:配置训练方法,告知训练时采用哪种优化器,选择哪个损失函数,选择什么评测指标
- model.fit:执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次数据集
- model.summary:打印出网络结构和参数统计
1.1 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()
1.2model.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_categorical_accuracy":y_是数值,y是独热码(概率分布),如y_=[1],y=[0.256,0.695,0.048]
1.3model.fit(训练集的输入特征,训练集的标签,batch_size=,epochs=,validation_data=(测试的输入特征,测试集的标签 ),validation_split=从训练集划分多少比例给测试集,validation_freq=多少次epoch测试一次)
1.4model.summary()打印出网络模型
2.对鸢尾花的利用网络八股,六步法实现
# 第一步 import
import tensorflow as tf
from sklearn import datasets
import numpy as np
# 第二步 train,test
# 交代训练集和测试集的训练数据
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_random_seed(116)
# 第三步 model.Sequential
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])
# 第四步:model.compile
model.compile(loss='sparse_categorical_crossentropy',
optimizer='sgd',
metrics=['sparse_categorical_accuracy'])
# model.fit
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2)
# model.summary
model.summary()
原来100多行代码只需要20多行就实现了。
3.class类封装网络结构
结构如下所示:
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
# 定义网络结构块:例如鸢尾花分类是有三个神经元的全连接
def call(self, x):
def call(self, x):
# 调用网络结构快,实现前向传播
returen y
model = MyModel()
例如使用类的方式实现鸢尾花分类如下: