·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
DZ插件网 门户 站长圈 查看内容

深度学习06神经网络搭建_笔记

2024-9-27 09:29| 发布者: 独家记忆| 查看: 82740| 评论: 0

摘要: 1.搭建神经网络六部法第一步:import 相关模块,如 import tensorflow as tf。第二步:指定输入网络的训练集和测试集,如指定训练集的输入 x_train 和标签y_train,测试集的输入 x_test 和标签 y_test。第三步:逐层 ...

1.搭建神经网络六部法


第一步:import 相关模块,如 import tensorflow as tf。

第二步:指定输入网络的训练集和测试集,如指定训练集的输入 x_train 和标签y_train,测试集的输入 x_test 和标签 y_test。

第三步:逐层搭建网络结构,model = tf.keras.models.Sequential()。

第四步:在 model.compile()中配置训练方法,选择训练时使用的优化器、损失函数和最终评价指标。

第五步:在 model.fit()中执行训练过程,告知训练集和测试集的输入值和标签、每个 batch 的大小(batchsize)和数据集的迭代次数(epoch)。

第六步:使用 model.summary()打印网络结构,统计参数数目。

2.函数用法介绍

2.1tf.keras.models.Sequential()


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( filter = 卷积核个数,kernel_size = 卷积核尺寸,
strides = 卷积步长,
padding = “valid” or “same”)

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

2.2 Model.compile( optimizer = 优化器,  lOSS = 损失函数,  metrics = [“准确率”])


Compile 用于配置神经网络的训练方法,告知训练时使用的优化器、损失函数和准确率评测标准。
其中:optimizer 可以是字符串形式给出的优化器名字,也可以是函数形式,使用函数 形式可以设置学习率、动量和超参数。

‘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=学习率衰减率)

Loss 可以是字符串形式给出的损失函数的名字,也可以是函数形式。‘mse’or tf.keras.losses.MeanSquaredError()

‘sparse_categorical_crossentropyor tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

损失函数常需要经过 softmax 等函数将输出转化为概率分布的形式。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, 0.048]。

‘sparse_ categorical_accuracy’:y_是以数值形式给出,y 是以独热码形式给出。如 y_=[1],y=[0.256, 0.695, 0.048]。

2.3 model.fit(训练集的输入特征, 训练集的标签, batch_size, epochs,  validation_data = (测试集的输入特征,测试集的标签),  validataion_split = 从测试集划分多少比例给训练集, validation_freq = 测试的 epoch 间隔次数)


fit 函数用于执行训练过程。

2.4model.summary()


summary 函数用于打印网络结构和参数统计。



上图是 model.summary()对鸢尾花分类网络的网络结构和参数统计,对于一个输入为 4 输出为 3 的全连接网络,共有 15 个参数。

3.iris 数据集代码复现


第一步:import 相关模块:
import tensorflow as tf
from sklearn import datasets
import numpy as np
D:\dprograme\Anaconda3\lib\site-packages\scipy\__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.26.4
warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"

第二步:指定输入网络地训练集和测试集:
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_seed(116)

以上代码实现了数据集的乱序。

第三步:逐层搭建网络结构:
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax',
kernel_regularizer=tf.keras.regularizers.l2())
])

如上所示,本例使用了单层全连接网络,第一个参数表示神经元个数,第二个参数表示网络所使用的激活函数,第三个参数表示选用的正则化方法。

第四步:在 model.compile()中配置训练方法:
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])

如上所示,本例使用 SGD 优化器,并将学习率设置为 0.1 ,选择SparseCategoricalCrossentrop 作为损失函数。由于神经网络输出使用了softmax 激活函数,使得输出是概率分布,而不是原始输出,所以需要将from_logits 参数设置为 False。鸢尾花数据集给的标签是 0,1,2 这样的数值,而网络前向传播的输出为 概率分布,所以 metrics 需要设置为sparse_categorical_accuracy。

第五步:在 model.fit()中执行训练过程:
model.fit(x_train,y_train,batch_size=32,epochs=500, validation_split = 0.2,validation_freq=20)
Epoch 1/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 5ms/step - loss: 1.7968 - sparse_categorical_accuracy: 0.3904
Epoch 2/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.8969 - sparse_categorical_accuracy: 0.6452
Epoch 3/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.8282 - sparse_categorical_accuracy: 0.7129
Epoch 4/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.7782 - sparse_categorical_accuracy: 0.7044
Epoch 5/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.7503 - sparse_categorical_accuracy: 0.6927
Epoch 6/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.7257 - sparse_categorical_accuracy: 0.6842
Epoch 7/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.7024 - sparse_categorical_accuracy: 0.6790
Epoch 8/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6825 - sparse_categorical_accuracy: 0.6790
Epoch 9/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6657 - sparse_categorical_accuracy: 0.6823
Epoch 10/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6515 - sparse_categorical_accuracy: 0.6856
Epoch 11/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6392 - sparse_categorical_accuracy: 0.6975
Epoch 12/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6284 - sparse_categorical_accuracy: 0.6975
Epoch 13/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6188 - sparse_categorical_accuracy: 0.7060
Epoch 14/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.6102 - sparse_categorical_accuracy: 0.7060
Epoch 15/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 3ms/step - loss: 0.6023 - sparse_categorical_accuracy: 0.7060
Epoch 16/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 2ms/step - loss: 0.5950 - sparse_categorical_accuracy: 0.7060
Epoch 17/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 3ms/step - loss: 0.5882 - sparse_categorical_accuracy: 0.7060
Epoch 18/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 3ms/step - loss: 0.5819 - sparse_categorical_accuracy: 0.7208

Epoch 500/500
[1m4/4[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m0s[0m 11ms/step - loss: 0.3643 - sparse_categorical_accuracy: 0.9454 - val_loss: 0.3450 - val_sparse_categorical_accuracy: 1.0000

<keras.src.callbacks.history.History at 0x29bbe59d940>

fit 中执行训练过程,x_train,y_train 分别表示网络的输入特征和标签,batch_size 表示一次喂入神经网络的数据量,epochs 表示数据集的迭代次数validation_split 表示数据集中测试集的划分比例,validation_freq 表示每迭代 20 次在测试集上测试一次准确率。

第六步:使用 model.summary()打印网络结构,统计参数数目:
model.summary()
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ dense (Dense) │ (None, 3) │ 15 │
└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘
Total params: 17 (72.00 B)
Trainable params: 15 (60.00 B)
Non-trainable params: 0 (0.00 B)
Optimizer params: 2 (12.00 B)




上一篇:Linux 搭建DNS服务: 从菜鸟到网络管理大神的进阶之路
下一篇:使用PT实现搭建帧中继网络

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.15.192.89,GMT+8, 2024-12-25 09:49 , Processed in 0.103175 second(s), 43 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部