Outline
Recap
(1) Neural Network in the 1980s
(2) Deep Learning now
(1) x = tf.random.normal([4, 784])
: 创建一个维度为[4, 784]的Tensor;
(2) net = tf.keras.layers.Dense(512)
: 创建一层神经网络,其输出维度为512;
(3) tf.keras.layers.Dense()
在运行时会自动根据输入的shape来生成权值,即w和b;
(4) out.shape
: 输出out的维度为[4, 512];
(5) net.kernal.shape
: 为自动生成的权值w,其shape为[784, 512];
(6) net.bias.shape
: 为自动生成的权值(偏置项)b,其shape为[512];
(1) net.build(input_shape=(None, 4))
: 可以通过调用net.build()函数创建权重 w w w和 b b b,其中4为下一层的维度;
(2) net.build(input_shape=(None, 20))
: 这里可以看出可以通过多次调用net.build()函数来计算权重 w w w和 b b b的值;
注: 在第一次创建神经网络的时候,没有 w w w和 b b b,这时系统就会自动调用net.build()函数来创建权重 w w w和 b b b;
(1) 如上图所示,net.build(input_shape=(None, 20)
)表示建立的网络的维度为20; out=net(tf.random.randn((4, 12)))
表示输入到这层神经网络中的数据的维度是12; 那么计算时就会报错;
(2) out=net(tf.random.randn((4, 20)))
: 将输入到这层神经网络中的数据的维度改为20,最终out.shape=[4, 10];
多层神经网络,只需要调用容器——keras.Sequential()即可。
(1) x = random.normal([2, 3])
: 创建一个维度为[2, 3]的Tensor;
(2) model = keras.Sequential([keras.layers.Dense(2, activation=‘relu’), keras.layers.Dense(2, activation=‘relu’), keras.layers.Dense(2)])
: 共设置3层全连接层:
[ 3 ] → [ 2 ] → [ 2 ] → [ 2 ] [3]→[2]→[2]→[2] [3]→[2]→[2]→[2]
(3) model.build(input_shape=[None, 3])
: 给定一个维度为3的输入;
(4) model.summary(): 相当于print(model)
,方便查看网络结构的函数;
(5) for p in model.trainable_variables
: 所有权重参数都被称为“可训练的变量”,即trainable_variables,在这个网络结构中,就是 [ w 1 , b 1 , w 2 , b 2 , w 3 , b 3 ] [w_1,b_1,w_2,b_2,w_3,b_3] [w1,b1,w2,b2,w3,b3];
(6) print(p.name, p.shape)
: 打印这些参数的名字和其维度;
import tensorflow as tf
from tensorflow import keras
x = tf.random.normal([2, 3])
model = keras.Sequential([
keras.layers.Dense(2, activation='relu'),
keras.layers.Dense(2, activation='relu'),
keras.layers.Dense(2)
])
model.build(input_shape=[None, 4])
model.summary()
for p in model.trainable_variables:
print(p.name, p.shape)
(1) Param为参数量,第一层有 2 × 3 + 2 = 8 2×3+2=8 2×3+2=8个; 第二层有 2 × 2 + 2 = 6 2×2+2=6 2×2+2=6个; 第三层有 2 × 2 + 2 = 6 2×2+2=6 2×2+2=6个;
(2) dense_n/kernel
: 第n层的 w w w的值;
dense_n/bias: 第n层的 b b b的值;
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
[2] https://www.youtube.com/watch?v=FwFduRA_L6Q
[3] https://capacitybc.com/mini-series-part-3-the-hero1
[4] https://www.facebook.com/deepdreamgenerator/photos/a.892441237472223/1449674838415524/?type=1&theater
[5] https://study.163.com/provider/480000001847407/index.htm?share=2&shareld=480000001847407