TensorBoard显示了先前模型中的许多“节点”

问题描述

我正在训练基于MNIST数据的模型,并且正在使用张量板来可视化训练和验证损失。

这是我正在尝试的当前模型的代码

model=tf.keras.models.Sequential()
#callback=tf.keras.callbacks.EarlyStopping(monitor='accuracy',min_delta=0,patience=0,verbose=0,mode='auto',restore_best_weights=False)
#model.add(tf.keras.layers.InputLayer(input_shape=[28,28]))

log_dir = "logs/fit/" + datetime.datetime.Now().strftime("%Y%m%d-%H%M%s")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir,histogram_freq=1)

reduce_lr=tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',factor=0.1,patience=5,min_delta=0.0001,cooldown=0,min_lr=0)

optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-07,amsgrad=True,name='Adam',clipnorm=5)

# if hparams[HP_OPTIMIZER]=='adam':
#     optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,#     name='Adam',clipnorm=5)

# elif hparams[HP_OPTIMIZER]=='sgd':
#     tf.keras.optimizers.SGD(learning_rate=0.01,momentum=0.9,nesterov=False,name='SGD',**kwargs)
    

model.add(tf.keras.layers.Flatten(input_shape=[28,28]))
l2_new=tf.keras.regularizers.L2(
    l2=0.05)


model.add(tf.keras.layers.Batchnormalization(
    axis=-1,momentum=0.99,epsilon=0.001,center=True,scale=True,beta_initializer='zeros',gamma_initializer='ones',moving_mean_initializer='zeros',moving_variance_initializer='ones',beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None,renorm=True,renorm_clipping=None,renorm_momentum=0.99))



model.add(tf.keras.layers.Dense(300,activation='relu',kernel_initializer="he_normal",kernel_regularizer=l2_new,bias_regularizer=l2_new))

model.add(tf.keras.layers.Batchnormalization(
    axis=-1,renorm_momentum=0.99))


model.add(tf.keras.layers.Dense(300,renorm_momentum=0.99))


model.add(tf.keras.layers.Dense(10,activation='softmax'))

对不起,如果有点混乱。我基本上是用

创建一个顺序模型
  1. 拼合输入层
  2. 批处理规范层 3.300个神经元致密层
  3. 批处理规范层
  4. 300个神经元致密层
  5. 批处理规范层
  6. 具有10个神经元的softmax输出层。

我的模型还使用了“亚当”优化器和学习率衰减。

当我在张量板的graphs子标题下查看模型时,得到以下图片

TensorBoard under graphs subheading

您可以看到,有很多“节点”,我猜这是因为我已经训练了多个模型。如何摆脱以前的所有尝试。

我尝试使用del modeltf.keras.backend.clear_session(),但是它们没有用。

编辑@H_502_40@:我已按照“ Aniket Bote”的建议删除了日志。这是新的输出

New Output

我仍然不确定它是正确的。从我的代码中,我认为我的图不应该像所示那样具有2个分支,而且我仍然在右侧获得了大批的批处理规范化“节点”。

解决方法

第二个分支本身不是图,而是一个子图
Tensorflow生成其执行的操作的图形,以加快代码的执行速度。如果单击那些,您会看到它们是批处理规范化层(而不是该层本身)所使用的功能。您可以在主图中看到所有图层信息。

如果您不希望这些节点,可以通过将BatchNormalization的可训练属性设置为False来摆脱它们。

在这种情况下,该层的权重不会改变,并且TensorFlow将不再需要为该层计算任何东西。将不会生成任何功能节点。

代码:

import tensorflow as tf
import numpy as np

np.random.seed(100)
x = tf.constant(np.random.randint(50,size =(1000,28,28)),dtype = tf.float32)
y = tf.constant(np.random.randint(10,)),dtype = tf.int32)

model=tf.keras.models.Sequential()
log_dir = "logs"
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir,histogram_freq=1,profile_batch = 0)

optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-07,amsgrad=True,name='Adam',clipnorm=5)

model.add(tf.keras.layers.Flatten(input_shape=[28,28]))
l2_new=tf.keras.regularizers.L2(
    l2=0.05)


model.add(tf.keras.layers.BatchNormalization(
    axis=-1,momentum=0.99,epsilon=0.001,center=True,scale=True,beta_initializer='zeros',gamma_initializer='ones',moving_mean_initializer='zeros',moving_variance_initializer='ones',beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None,renorm=True,renorm_clipping=None,renorm_momentum=0.99,trainable = False))



model.add(tf.keras.layers.Dense(300,activation='relu',kernel_initializer="he_normal",kernel_regularizer=l2_new,bias_regularizer=l2_new))

model.add(tf.keras.layers.BatchNormalization(
    axis=-1,trainable = False))


model.add(tf.keras.layers.Dense(300,trainable = False))


model.add(tf.keras.layers.Dense(10,activation='softmax'))


model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
tf.keras.utils.plot_model(model,'my_first_model.png',show_shapes=True)

model.fit(x,y,epochs = 10,callbacks = tensorboard_callback)

输出:

Epoch 1/10
32/32 [==============================] - 0s 10ms/step - loss: 89.0275 - accuracy: 0.1100
Epoch 2/10
32/32 [==============================] - 0s 9ms/step - loss: 56.7906 - accuracy: 0.1310
Epoch 3/10
32/32 [==============================] - 0s 9ms/step - loss: 48.5681 - accuracy: 0.1490
Epoch 4/10
32/32 [==============================] - 0s 9ms/step - loss: 42.8176 - accuracy: 0.1850
Epoch 5/10
32/32 [==============================] - 0s 9ms/step - loss: 38.5857 - accuracy: 0.2110
Epoch 6/10
32/32 [==============================] - 0s 9ms/step - loss: 35.1675 - accuracy: 0.2540
Epoch 7/10
32/32 [==============================] - 0s 9ms/step - loss: 32.3327 - accuracy: 0.2750
Epoch 8/10
32/32 [==============================] - 0s 9ms/step - loss: 29.8839 - accuracy: 0.3420
Epoch 9/10
32/32 [==============================] - 0s 9ms/step - loss: 27.7426 - accuracy: 0.3940
Epoch 10/10
32/32 [==============================] - 0s 10ms/step - loss: 25.6565 - accuracy: 0.4930

张量板图图像: tensorboard