如何解决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'))
对不起,如果有点混乱。我基本上是用
创建一个顺序模型- 拼合输入层
- 批处理规范层 3.300个神经元致密层
- 批处理规范层
- 300个神经元致密层
- 批处理规范层
- 具有10个神经元的Softmax输出层。
我的模型还使用了“亚当”优化器和学习率衰减。
当我在张量板的graphs子标题下查看模型时,得到以下图片:
您可以看到,有很多“节点”,我猜这是因为我已经训练了多个模型。如何摆脱以前的所有尝试。
我尝试使用del model
和tf.keras.backend.clear_session()
,但是它们没有用。
编辑:我已按照“ Aniket Bote”的建议删除了日志。这是新的输出:
我仍然不确定它是正确的。从我的代码中,我认为我的图不应该像所示那样具有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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。