tf.keras是tensorflow2引入的高封装都得框架,可以用于快速搭建神经网络。
将鼠标放在函数上按住Ctrl键,根据源码和注释了解函数得实现方法。
第一步:import相关模块。
# 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
第三步:逐层搭建网络结构。
# models.Sequential
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer = tf.keras.regularizers.l2())
])
第四步:在model.compile()中配置训练方法,选择训练时使用得优化器、损失函数和最终评价指标。
# model.compile
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy']
)
第五步:在model.fit()中执行训练过程,告知训练集和测试集得输入值和标签、每个batch大小(batchsize)和数据集的迭代次数(epoch)。
#model.fit
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
第六步:使用model.summary()打印网络结构,统计参数数目。
#model.summary
model.summary()
tf.kera.models.Sequential()
Sequential函数是一个容器,描述了神经网络的网络结构,在Sequential函数的输入参数中描述从输入层到输出层的网络结构。
如:
import tensorflow as tf
from tensorflow.keras.layers import Dense,Flatten
from tensorflow.keras import Model
model = tf.keras.models.Sequential([
# 拉直层:拉直层可以变换张量的尺寸,把输入特征拉直为一维数组,是不含计算参数的层。
tf.keras.layers.Flatten()
# 全连接层
tf.keras.layers.Dense(神经元个数,activation="激活函数",keras.regularizers="正则化方式")
# 其中
activation可选:relu、softmax、sigmoid、tanh等
keras_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()
])
# Compile用于配置神经网络的训练方法,告知训练过程中使用的优化器、损失函数、准确率评测标准。
model.compile(optimizer=优化器,loss=损失函数, metrics=["准确率"])
# 1.优化器可以是字符串形式给出优化器名称,也可以是函数形式。使用函数形式可以设置学习率、动量和超参数。
'sgd' or tf.optimizers.SGD(lr=学习率, decay=学习率衰减率,momentum=动量参数)
'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率, decay=学习率衰减率)
'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率, decay=学习率衰减率)
'adam' or tf.keras.optimizers.Adam(lr=学习率, decay=学习率衰减率)
# 2.loss可以是字符串形式给出优化器名称,也可以是函数形式。
'mse' or tf.keras.losses.MeanSquaredError()
'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
#loss常需要经过softmax等函数将输出转化为概率分布的形式。from_logits则用来标注该损失函数是否需要转换为概率的形式,
# 取False时表示转化为概率分布,取True时表示没有转化为概率分布,直接输出。
# 3.Metrics标注网络评测指标
'accuracy': y_ 和 y 都是数值,如 y_=[1] y=[1]
'categorical_accuracy': y_ 和 y都是以独热码和概率分布表示。 y_=[0,1] y=[0.4,0.6]
'sparse_categorical_accuracy': y_ 是以数值形式给出,y 是以独热码形式给出。 y_=[1],y=[0.4,0.6]
# model.fit用于执行训练过程
model.fit(
训练的输入特征,训练集标签,batch_size,epochs,
validation_data = (测试集的输入特征,测试集的标签),
validation_split = 从测试集划分多少比例给训练集,
validation_freq = 测试的epoch间隔次数
)
#summary函数用于打印网络结构和参数统计
model.summary()