[英]ValueError: weights can not be broadcast to values using loss function from keras
I'm using tensorflow keras to make a simple CNN_3D model.我正在使用 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'])
So from the debug message printing, the outputs shape is (None, 8, 8, 8, 1) and my label shape is also (8, 8, 8, 1).因此,从调试消息打印来看,输出形状是 (None, 8, 8, 8, 1) 而我的标签形状也是 (8, 8, 8, 1)。 So basically I want to calculate the KLDivergence between two cubes.
所以基本上我想计算两个立方体之间的 KLDivergence。
However, I'm getting this error message;但是,我收到此错误消息;
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,).
I'm guessing the important line is this;我猜重要的一行是这个;
ValueError: weights can not be broadcast to values.
ValueError:权重不能广播到值。 values.rank=4.
values.rank=4。 weights.rank=1.
weights.rank=1。 values.shape=(None, 8, 8, 8).
values.shape=(None, 8, 8, 8)。 weights.shape=(None,).
weights.shape=(无,)。
which comes from this line;来自这一行;
model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=2e-5),
loss=tf.keras.losses.KLDivergence(), metrics=['accuracy'])
I don't understand what role weights is playing here and why the loss function is not working.我不明白权重在这里扮演什么角色以及为什么损失函数不起作用。
Does anybody know or have any suggestions about this issue?有没有人知道或对这个问题有任何建议?
You are mixing keras
and tf.keras
, you cannot do that.您正在混合
keras
和tf.keras
,您不能这样做。
Either you use only keras
, or you use only tf.keras
.要么只使用
keras
,要么只使用tf.keras
。 Must choose one.必须选择一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.