Tensorflow2.x框架-用 Tensorflow API:tf.keras 搭建网络八股 sequential

用 Tensorflow API:tf.keras 搭建网络八股 sequential

博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!

目录

一、import 导入相关模块(导包)

二、导入数据集

三、Sequential() 搭建网络结构

四、compile() 配置训练方法

五、fit() 执行训练过程

六、summary() 输出网络结构和参数统计

七、完整代码


一、import 导入相关模块(导包)

# 模块导入
import numpy as np
import tensorflow as tf
from sklearn import datasets

import 相关模块。比如 import tensorflow as tf

二、导入数据集

# 导入数据集,分别为输入特征和标签
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

告知要喂入网络的训练集和测试集是什么,也就是要指定 训练集的输入特征x_train 和 训练集的标签y_train,还可以指定 测试集的输入特征x_test 和 测试集的标签y_test。

三、Sequential() 搭建网络结构

# 搭建网络结构
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2())
])

在 Sequential 中搭建网络结构,逐层描述每层网络。相当于走了一遍前向传播。

搭建网络结构:

model = tf.keras.models.Sequential([网络结构])    # 描述各层网络

(1)Sequential() 可以认为是个容器,这个容器里封装了一个神经网络结构。

(2)在 Sequential() 中,要描述从输入层到输出层每一层的网络结构。每一层的网络结构可以是:拉直层、全连接层、卷积层、LSTM层。

网络结构举例:

(1)拉直层:tf.keras.layers.Flatten()

    拉直层 Flatten 不含计算,只是形状转换,把输入特征拉直变成一维数组。

(2)全连接层:tf.keras.layers.Dense(神经元个数, activation="激活函数",  kernel_regularizer=哪种正则化)

    activation(字符串给出)可选:relusoftmaxsigmoidtanh

    kernel_regularizer 可选:tf.keras.regularizers.l1()tf.keras.regularizers.l2()

(3)卷积层:tf.keras.layers.Conv2D(filters=卷积核个数, kernel_size=卷积核尺寸, strides=卷积步长, padding="valid" or "same")

(4)LSTM层:tf.keras.layers.LSTM()

四、compile() 配置训练方法

# 配置训练方法
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=["sparse_categorical_accuracy"])

训练方法配置:

model.compile(optimizer=优化器, 
              loss=损失函数,
              metrics=["准确率"]
              )

 optimizer 可选:

(1)"sgd" or tf.keras.optimizers.SGD(lr=学习率, momentum=动量参数)

(2)"adagrad" or tf.keras.optimizers.Adagrad(lr=学习率)

(3)"adadelta" or tf.keras.optimizers.Adadelta(lr=学习率)

(4)"adam" or tf.keras.optimizers.Adam(lr=学习率, beta_1=0.9, beta_2=0.999)

 loss 可选:

(1)"mse" or tf.keras.losses.MeanSquaredError()

(2)"sparse_categorical_crossentropy" or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

    有些神经网络的输出,是经过了softmax 等函数的概率分布;有些则不经过概率分布直接输出。

    from_logits=False:神经网络预测结果输出前经过了概率分布。

    from_logits=True:神经网络预测结果输出前没有经过概率分布,直接输出了。

     坑:运行结果显示的网络评测指标和蒙的概率一样,比如,十分类我们的正确率是十分之一,网络结构又没有什么问题,很可能是 from_logits 参数设置错了。

 metrics 可选:

(1)"accuracy":y_ 和 y 都是数值,比如 y_=[1]    y=[1]

    示例:鸢尾花分类标签是第1类鸢尾花用数值 [1] 表示,网络输出结果是第1类鸢尾花也用数值 [1] 表示。

(2)"categorical_accuracy" :y_ 和 y 都是独热码(概率分布),如 y_=[0, 1, 0]    y=[0.256, 0.695, 0.04]

    示例:鸢尾花分类标签是第1类鸢尾花用独热码 [0, 1, 0] 表示,网络输出结果是第1类鸢尾花也用概率分布 [0.256, 0.695, 0.04] 表示。

(3)"sparse_categorical_accuracy":y_ 是数值,y 是独热码(概率分布),如y_=[1]    y=[0.256, 0.695, 0.04]

    示例:鸢尾花分类标签是第1类鸢尾花用数值 [1] 表示,网络输出结果是第1类鸢尾花也用概率分布 [0.256, 0.695, 0.04] 表示。

五、fit() 执行训练过程

# 执行训练过程
model.fit(x_train, 
          y_train, 
          batch_size=32, 
          epochs=500, 
          validation_split=0.2, 
          validation_freq=20
          )

执行训练过程:

model.fit(训练集的输入特征, 
          训练集的标签,
          batch_size=每次喂入神经网络的样本数,
          epochs=迭代多少次数据集,
          validation_data=(测试集的输入特征, 测试集的标签), 
          validation_split=从训练集划分多少比例的数据给测试集, 
          validation_freq=每多少次epoch迭代使用测试集验证一次结果
          )

validation_data / validation_split 二选一。

六、summary() 输出网络结构和参数统计

# 打印出网络结构和参数统计
model.summary()

  在这里插入图片描述

示例:鸢尾花分类神经网络是四输入三输出的一层网络,这一层是 Dense 全连接。

           共有 15 个参数,可训练参数 15 个,不可训练参数 0 个。

七、完整代码

# 模块导入
import numpy as np
import tensorflow as tf
from sklearn import datasets

# 导入数据集,分别为输入特征和标签
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

# 随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率)
# seed:随机种子,是一个整数,当设置之后,每次生成的随机数都一样
np.random.seed(116)     # 使用相同的seed,保证输入特征和标签一一对应
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())
])

# 配置训练方法
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=["sparse_categorical_accuracy"])

# 执行训练过程
model.fit(x_train,
          y_train,
          batch_size=32,
          epochs=500,
          validation_split=0.2,
          validation_freq=20
          )

# 打印出网络结构和参数统计
model.summary()

 

你可能感兴趣的:(Tensorflow2.x框架-用 Tensorflow API:tf.keras 搭建网络八股 sequential)