Python ValueError:无法使用keras的损失函数将权重广播到值

Python ValueError:无法使用keras的损失函数将权重广播到值,python,python-3.x,tensorflow,keras,deep-learning,Python,Python 3.x,Tensorflow,Keras,Deep Learning,我正在使用tensorflow keras制作一个简单的CNN_3D模型 inputs = keras.Input(shape=(65, 65, 65, 1), name='t1_image') x = layers.Conv3D(16, (4, 4, 4), name='cnn_1')(inputs) x = layers.Dropout(0.3)(x) x = layers.BatchNormalization()(x) x = layers.LeakyReLU()(x) x = layer

我正在使用tensorflow keras制作一个简单的CNN_3D模型

inputs = keras.Input(shape=(65, 65, 65, 1), name='t1_image')
x = layers.Conv3D(16, (4, 4, 4), name='cnn_1')(inputs)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
x = layers.LeakyReLU()(x)
x = layers.Conv3D(24, (3, 3, 3), name='cnn_2')(x)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
x = layers.LeakyReLU()(x)
x = layers.MaxPooling3D((2, 2, 2), name='max_pool_1')(x)
x = layers.Conv3D(28, (3, 3, 3), name='cnn_3')(x)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
x = layers.LeakyReLU()(x)
x = layers.MaxPooling3D((2, 2, 2), name='max_pool_2')(x)
x = layers.Conv3D(34, (4, 4, 4), name='cnn_4')(x)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
x = layers.LeakyReLU()(x)
x = layers.Conv3D(2, (4, 4, 4), name='cnn_5')(x)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
x = layers.LeakyReLU()(x)
outputs = layers.Dense(1, activation='sigmoid', name='predictions')(x)

#print(outputs.shape)

model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=2e-5),
              loss=tf.keras.losses.KLDivergence(), metrics=['accuracy'])
因此,从调试消息打印中,输出形状是(None,8,8,8,1),我的标签形状也是(8,8,8,1)。基本上我想计算两个立方体之间的散度

但是,我收到了这个错误消息

Traceback (most recent call last):
  File "new_seg.py", line 136, in <module>
    loss=tf.keras.losses.KLDivergence(), metrics=['accuracy'])
  File "/N/soft/rhel7/deeplearning/Python-3.7.6/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 75, in symbolic_fn_wrapper
    return func(*args, **kwargs)
  File "/N/soft/rhel7/deeplearning/Python-3.7.6/lib/python3.7/site-packages/keras/engine/training.py", line 229, in compile
    self.total_loss = self._prepare_total_loss(masks)
  File "/N/soft/rhel7/deeplearning/Python-3.7.6/lib/python3.7/site-packages/keras/engine/training.py", line 692, in _prepare_total_loss
    y_true, y_pred, sample_weight=sample_weight)
  File "/N/u/jp109/Carbonate/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/losses.py", line 128, in __call__
    losses, sample_weight, reduction=self._get_reduction())
  File "/N/u/jp109/Carbonate/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/utils/losses_utils.py", line 107, in compute_weighted_loss
    losses, sample_weight)
  File "/N/u/jp109/Carbonate/.local/lib/python3.7/site-packages/tensorflow_core/python/ops/losses/util.py", line 148, in scale_losses_by_sample_weight
    sample_weight = weights_broadcast_ops.broadcast_weights(sample_weight, losses)
  File "/N/u/jp109/Carbonate/.local/lib/python3.7/site-packages/tensorflow_core/python/ops/weights_broadcast_ops.py", line 167, in broadcast_weights
    with ops.control_dependencies((assert_broadcastable(weights, values),)):
  File "/N/u/jp109/Carbonate/.local/lib/python3.7/site-packages/tensorflow_core/python/ops/weights_broadcast_ops.py", line 103, in assert_broadcastable
    weights_rank_static, values.shape, weights.shape))
ValueError: weights can not be broadcast to values. values.rank=4. weights.rank=1. values.shape=(None, 8, 8, 8). weights.shape=(None,).
我不明白权重在这里扮演什么角色,为什么损失函数不起作用


有人知道或对这个问题有什么建议吗?

你把
keras
tf.keras
混在一起,你不能这样做


要么只使用
keras
,要么只使用
tf.keras
。我们必须选择一个

它是否适用于“二进制交叉熵”?谢谢!这可能就是问题所在。我这样做是因为系统无法导入tensorflow.keras。
model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=2e-5),
                  loss=tf.keras.losses.KLDivergence(), metrics=['accuracy'])