我创建了一个带有三个卷积层和两个完全连接层的卷积神经网络。我使用tf.train.saver()
来保存变量。
当我使用inspect_checkpoint.py
检查检查点文件中保存的变量时。为什么每个图层都保存了两个额外的变量,例如Adam_1
和Adam
?此外,beta1_power
和beta2_power
是什么?
conv_layer1_b (DT_FLOAT) [32]
conv_layer1_w (DT_FLOAT) [1,16,1,32]
conv_layer1_b/Adam (DT_FLOAT) [32]
conv_layer1_w/Adam (DT_FLOAT) [1,16,1,32]
conv_layer1_w/Adam_1 (DT_FLOAT) [1,16,1,32]
conv_layer1_b/Adam_1 (DT_FLOAT) [32]
conv_layer3_w/Adam (DT_FLOAT) [1,16,64,64]
conv_layer3_w (DT_FLOAT) [1,16,64,64]
conv_layer3_b/Adam_1 (DT_FLOAT) [64]
conv_layer3_b (DT_FLOAT) [64]
conv_layer3_b/Adam (DT_FLOAT) [64]
conv_layer3_w/Adam_1 (DT_FLOAT) [1,16,64,64]
conv_layer2_w/Adam_1 (DT_FLOAT) [1,16,32,64]
conv_layer2_w/Adam (DT_FLOAT) [1,16,32,64]
conv_layer2_w (DT_FLOAT) [1,16,32,64]
conv_layer2_b/Adam_1 (DT_FLOAT) [64]
conv_layer2_b (DT_FLOAT) [64]
conv_layer2_b/Adam (DT_FLOAT) [64]
beta1_power (DT_FLOAT) []
beta2_power (DT_FLOAT) []
NN1_w (DT_FLOAT) [2432,512]
NN1_b (DT_FLOAT) [512]
NN1_w/Adam_1 (DT_FLOAT) [2432,512]
NN1_b/Adam_1 (DT_FLOAT) [512]
NN1_w/Adam (DT_FLOAT) [2432,512]
NN1_b/Adam (DT_FLOAT) [512]
NN2_w (DT_FLOAT) [512,2]
NN2_b (DT_FLOAT) [2]
NN2_w/Adam_1 (DT_FLOAT) [512,2]
NN2_b/Adam_1 (DT_FLOAT) [2]
NN2_w/Adam (DT_FLOAT) [512,2]
NN2_b/Adam (DT_FLOAT) [2]
答案 0 :(得分:4)
您正在使用Adam优化器(https://arxiv.org/abs/1412.6980)进行优化。 Adam有两个状态变量来存储有关梯度的统计信息,这些梯度与参数(算法1)的大小相同,这是每个参数变量的两个附加变量。优化器本身有一些超参数,其中有β 1 和β 2 ,我猜你的情况是存储为变量。