tf.keras + Sequential() 可以搭建出上层输入就是下层输出的顺序网络结构,但是无法写出一些带有跳连的非顺序网络结构。
这时候可以选择用类 class 搭建神经网络结构,即使用 class 类封装一个网络结构:
...
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
定义网络结构块
def call(self, x):
调用网络结构块,实现前向传播
return ymodel = MyModel()
...
可以认为 __init__() 函数准备出了搭建网络所需的各种积木,call() 函数调用积木完成了神经网络的搭建,即实现前向传播,从输入x到输出y。
六步:
- import 相关模块。
- 指定要喂入网络的训练集和测试集。
- class MyModel(Model) model = MyModel()
- 在 compile() 中配置训练方法。
- 在 fit() 中执行训练过程。
- 用 summary() 打印出网络的结构和参数统计。
代码:
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np
# 读取训练用的输入特征和标签
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)
# 定义神经网络类
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
# 定义第一层网络结构:含有三个神经元的全连接层
self.d1 = Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2())
def call(self, x):
# 调用网络结构,实现前向传播
y = self.d1(x)
return y
# 声明神经网络模型对象
model = IrisModel()
# 配置训练方法
model.compile(optimizer=tf.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=[tf.keras.metrics.sparse_categorical_accuracy])
# 执行训练过程
model.fit(x_train, y_train,
batch_size=32, epochs=500,
validation_split=0.2,
validation_freq=20)
# 打印网络的结构和参数
model.summary()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【tensorflow】tf.keras + 神经网络类class 6 步搭建神经网络 - Python技术站