Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Keras中创建自定义回调以将渐变记录到Tensorboard_Python_Tensorflow_Keras - Fatal编程技术网

Python 在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

我正在尝试编写一个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/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)