Python 在Keras中创建自定义回调以将渐变记录到Tensorboard
我正在尝试编写一个Keras回调函数,它可以将梯度记录到Tensorboard。但是,我遇到了以下错误Python 在Keras中创建自定义回调以将渐变记录到Tensorboard,python,tensorflow,keras,Python,Tensorflow,Keras,我正在尝试编写一个Keras回调函数,它可以将梯度记录到Tensorboard。但是,我遇到了以下错误 Traceback (most recent call last): File "ssd300_mobilenetv2_split_training.py", line 474, in <module> initial_epoch=initial_epoch) File "/home/nlmsr/miniconda3/envs/trai
Traceback (most recent call last):
File "ssd300_mobilenetv2_split_training.py", line 474, in <module>
initial_epoch=initial_epoch)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/engine/training.py", line 1082, in fit
initial_epoch=initial_epoch)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/engine/training.py", line 1658, in fit_generator
initial_epoch=initial_epoch)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/engine/training_generator.py", line 221, in fit_generator
callbacks._call_batch_hook('train', 'end', batch_index, batch_logs)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/callbacks.py", line 85, in _call_batch_hook
batch_hook(batch, logs)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/keras/callbacks.py", line 366, in on_train_batch_end
self.on_batch_end(batch, logs=logs)
File "ssd300_mobilenetv2_split_training.py", line 390, in on_batch_end
loss = self.model.loss(y_true=y_tensor, y_pred=y_pred)
File "/home/nlmsr/Documents/ssd-keras/keras_loss_function/keras_ssd_reid_loss.py", line 170, in compute_loss
self.neg_pos_ratio = tf.constant(self.neg_pos_ratio)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py", line 161, in constant_v1
allow_broadcast=False)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/tensorflow_core/python/framework/constant_op.py", line 265, in _constant_impl
allow_broadcast=allow_broadcast))
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/tensorflow_core/python/framework/tensor_util.py", line 449, in make_tensor_proto
_AssertCompatible(values, dtype)
File "/home/nlmsr/miniconda3/envs/training/lib/python3.7/site-packages/tensorflow_core/python/framework/tensor_util.py", line 328, in _AssertCompatible
raise TypeError("List of Tensors when single Tensor expected")
TypeError: List of Tensors when single Tensor expected
我不明白张量列表在哪里?我尝试只将一个样本和标签传递给model.loss,但这又抛出了另一个错误,即输入张量必须为dim 4
(我使用的是Keras 2.2.5和TF1.15)
class monitorGradients(Callback):
def __init__(self, val_generator, log_dir):
self.val_gen = val_generator
self.writer = tf.summary.FileWriter(log_dir)
def on_batch_end(self, batch, logs=None):
x,y = next(self.val_gen)
x_tensor = tf.convert_to_tensor(x)
y_tensor = tf.convert_to_tensor(y)
print(x_tensor, y_tensor)
y_pred = self.model(x_tensor)
loss = self.model.loss(y_true=y_tensor, y_pred=y_pred)
gradients = K.gradients(loss, self.model.trainable_weights)
with self.writer().as_default():
for weights, grads in zip(self.model.trainable_weights, gradients):
tf.summary.histogram(weights.name, data=grads, step=epoch)
summaries = tf.summary.merge_all()
self.writer.add_summary(summaries)