例如:2层的全连接层上加上单独的激活函数层,可以通过Sequential容器封装为一个网络
import tensorflow as tf
import numpy as np
#导入keras模型,不能使用import keras ,它导入的是标准的keras库
from tensorflow import keras
from tensorflow.keras import layers,Sequential#导入常见的网络层类
x=tf.constant([2.,1.,0.1])#创建输入张量
#layer=layers.Softmax(axis=-1)#创建Softmax层
#out=layer(x)#调用Softmax向前计算,输出为out
#out=tf.nn.softmax(x)#调用Softmax函数完成向前计算
#print(out)
network=Sequential(#封装一个网络层
[layers.Dense(3,activation=None),#全连接层,此处不使用激活函数
layers.ReLU(),#激活函数
layers.Dense(2,activation=None),#全连接层,此处不使用激活函数
layers.ReLU()#激活函数
])
x=tf.random.normal([4,3])
out=network(x)#输入从第一层开始,逐步传播至输出层,并返回输出层的输出
print(out)
layers_num=2#堆叠两次
network=Sequential([])#先创建空的网络容器
for i in range(layers_num):
network.add(layers.Dense(3))#添加全连接层
network.add(layers.ReLU())#添加激活函数层
network.build(input_shape=[4,4])#创建网络参数
network.summary()#可以方便的打印出网络结构和参数量
for p in network.trainable_variables:#打印网络的待优化参数名和shape
print(p.name,p.shape)#参数名和形状
tf.Tensor(
[[0. 0. ]
[0. 0.01343679]
[0. 0. ]
[0. 0.2279749 ]], shape=(4, 2), dtype=float32)
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_2 (Dense) multiple 15
_________________________________________________________________
re_lu_2 (ReLU) multiple 0
_________________________________________________________________
dense_3 (Dense) multiple 12
_________________________________________________________________
re_lu_3 (ReLU) multiple 0
=================================================================
Total params: 27
Trainable params: 27
Non-trainable params: 0
_________________________________________________________________
dense_2/kernel:0 (4, 3)
dense_2/bias:0 (3,)
dense_3/kernel:0 (3, 3)
dense_3/bias:0 (3,)