1、搭建Softmax网络层
通过 layers.Softmax(axis)类搭建 Softmax 网络层,其中 axis 参数指定进行 softmax 运算的维度。
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
x = tf.constant([2.,1.,0.1]) # 创建常量
print(x)
layer = layers.Softmax(axis=-1) # 创建Softmax层
layer(x) # 调用softmax前向计算
print(layer(x)) # 输出概率分布
在这里介绍一下Softmax函数:
2、网络容器Sequential
# 导入Sequential容器
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,Sequential
network = Sequential([ # 封装一个网络
layers.Dense(3,activation=None), # 全连接层
layers.ReLU(), # 激活函数层
layers.Dense(2,activation=None), # 全连接层
layers.ReLU() # 激活函数层
])
x = tf.random.normal([4,3])
network(x) # 输入从第一层开始,逐层传播至最末层
network.summary()
结果如下:
通过 add()方法继续追加新的网络层
import tensorflow
from tensorflow import keras
from tensorflow.keras import layers,Sequential
# 通过指定任意的 layers_num 参数即可创建对应层数的网络结构。
layers_num = 2 # 堆叠2次
network = Sequential([]) # 先创建空的网络
for _ in range(layers_num):
network.add(layers.Dense(3)) # 添加全连接层
network.add(layers.ReLU()) # 添加激活函数层
network.build(input_shape=(None,4)) # 创建网络参数
network.summary()
结果如下:
可以看到 Layer 列为每层的名字,这个名字由 TensorFlow 内部维护,与 Python 的对象名不一样,Param#列为层的参数个数,Total params 统计出了总的参数量,Trainable params 为待优化的参数量,Non-trainable params 为不需要优化的参数量。
介绍几个函数:
summary()函数可以方便打印出网络结构和参数量。
通过调用类的 build 方法并指定输入大小,即可自动创建所有层的内部张量。
Sequential 对象的trainable_variables 和 variables 包含了所有层的待优化张量列表和全部张量列表:
# 打印网络的待优化参数名与shape
for p in network.trainable_variables:
print(p.name,p.shape)
3、模型装配、训练与测试
3.1 模型装配
用Sequential容器封装网络,compile函数指定网络使用的优化器对象、损失函数、评价指标。
3.2 模型训练
通过 fit()函数送入待训练的数据和验证用的数据集。
3.3 模型测试
Model.predict(x)方法即可完成模型的预测。
4、模型保存与加载
4.1 张量方式
过调用 Model.save_weights(path)方法即可讲当前的网络参数保存到 path 文件上。
4.2 网络方式
通过 Model.save(path)函数可以将模型的结构以及模型的参数保存到一个 path 文件上,在不需要网络源文件的条件下,通过 keras.models.load_model(path)即可恢复网络结构和网络参数。
4.3 SaveModel方式
通过 tf.keras.experimental.export_saved_model(network, path)即可将模型以 SavedModel方式保存到 path 目录中。
5、自定义类
5.1 自定义网络层