python - 在图形执行中使用“sample_weight”不兼容的形状
问题描述
在 Eager 中运行良好。下面的代码+错误;粘贴的输出来自带有tf.__version__ == 2.3.0-dev20200526
(tf-nightly) 的 Colab 实例,也在 2.2.0 和 Windows 10 上重现。TF 1.14.0 Graph 中没有错误。
有什么线索吗?
尝试调试:放置在此处(在本地安装中)
print(sample_weight)
try: print("sample_weight =", K.eval(sample_weight))
except: pass
print(loss, '\n')
产量:
# EAGER
Tensor("ExpandDims:0", shape=(32, 1), dtype=float32)
Tensor("mean_squared_error/weighted_loss/value:0", shape=(), dtype=float32)
Tensor("ExpandDims:0", shape=(32, 1), dtype=float32)
Tensor("mean_squared_error/weighted_loss/value:0", shape=(), dtype=float32)
# GRAPH
1.0
sample_weight = 1.0
Tensor("loss/conv2d_loss/weighted_loss/Mul:0", shape=(32, 28, 28), dtype=float32)
Tensor("conv2d_sample_weights:0", shape=(None,), dtype=float32)
sample_weight = [1.]
Tensor("loss_1/conv2d_loss/weighted_loss/Mul:0", shape=(32, 28, 28), dtype=float32)
Graphsample_weight
以不同的方式处理张量。Eager 和 Graph 都适用于 2D 输出形状和loss='categorical_crossentropy'
,尽管可能不正确;底部的代码在这里。
可重现的代码 + 错误:
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D
from tensorflow.keras.models import Model
tf.compat.v1.disable_eager_execution()
batch_shape = (32, 28, 28, 1)
ipt = Input(batch_shape=batch_shape)
out = Conv2D(filters=1, kernel_size=(1, 1))(ipt)
model = Model(ipt, out)
model.compile('adam', 'mse')
x = y = np.random.randn(*batch_shape)
sw = np.ones(len(x))
model.train_on_batch(x, y, sw)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py in __call__(self, *args, **kwargs)
1470 ret = tf_session.TF_SessionRunCallable(self._session._session,
1471 self._handle, args,
-> 1472 run_metadata_ptr)
1473 if run_metadata:
1474 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
InvalidArgumentError: Incompatible shapes: [32] vs. [32,28,28]
[[{{node training/Adam/gradients/gradients/loss_1/conv2d_loss/weighted_loss/Mul_grad/Mul}}]]
解决方案
推荐阅读
- php - 我可以在 PHP 邮件发送功能中添加紧急状态,以便在用户收到密码时重置密码不会过期吗?
- python - 如何在 os.popen 中传递多个命令
- amp-html - 获取 amp-form 和响应标头的正确方法是什么?
- json - 使用正确的键值对将文本文件转换为 json
- html - 如何在 Jenkins 版本中放置 iframe 或其替代品。2.176.2?
- javascript - 溢出在单词的开头,或在后续文本的末尾,直到下一次出现
- jenkins - 如何将完成的管道作业构建发布到公共 Jenkins 实例?
- android - 是否可以选择使用手机的内置(如果存在)照片编辑器?
- ansible-awx - 如何使用 awx 连接到 Windows 客户端?
- java - OOP继承作业(动物到狮子超类继承)