ValueError:尝试将“y”转换为张量,但失败。错误:不支持无值

2024-04-25 08:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

不起作用

from tensorflow.python.keras.layers import Input, Dense
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.optimizers import Nadam
import numpy as np

ipt = Input(shape=(4,))
out = Dense(1, activation='sigmoid')(ipt)

model = Model(ipt, out)
model.compile(optimizer=Nadam(lr=1e-4), loss='binary_crossentropy')

X = np.random.randn(32,4)
Y = np.random.randint(0,2,(32,1))
model.train_on_batch(X,Y)

工作:从上面的导入中删除.python。在

怎么回事,怎么解决?在


其他信息

  • CUDA 10.0.130、cuDNN 7.4.2、Python 3.7.4、Windows 10
  • tensorflowtensorflow-gpuv2.0.0,keras2.3.0通过pip,其他都通过anaconda3
  • 在每个调试1中,我注意到pip安装的是r2.0分支,而不是master;用master手动覆盖本地{}文件夹会破坏一切,但是对选定的几个文件这样做并不能,尽管错误仍然存在

调试1:文件差异

这适用于我的本地安装,而不是TF的Github分支master或{};Github files缺少{},原因如下:

^{pr2}$
[1] D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\api\_v2\keras\__init__.py
[2] D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\__init__.py

查看__init__Optimizer

# [1]
from tensorflow.python.keras.optimizer_v2.optimizer_v2 import OptimizerV2 as Optimizer
# [2]
from tensorflow.python.keras import optimizers

# in python.keras.optimizers.py:
# all imports are from tensorflow.python
class Optimizer(object): # <--- does NOT use optimizer_v2 for Optimizer

这似乎是问题的根源,如下所示:

from tensorflow.python.keras.layers import Input, Dense
from tensorflow.python.keras.models import Model
from tensorflow.keras.optimizers import Nadam

然而,这很奇怪,因为直接import keras也没有使用optimizer_v2,尽管{}中{}的定义确实不同。


调试2:执行差异

并行调试,虽然两个都使用相同的training.py,但执行差异相当快:

### TF.KERAS
    if self._experimental_run_tf_function: #  TRUE
### TF.PYTHON.KERAS
    if self._experimental_run_tf_function: #  FALSE

前者继续调用training_v2_utils.train_on_batch(...),然后返回,后者self._standardize_user_data(...)和其他函数,最后失败。在


调试3(+解决方案?):故障线

if None in grads: # <-- in traceback

在其正上方插入print(None in grads)会产生完全相同的错误-因此,它似乎与TF2 iterable ops有关--这起作用:

if any([g is None for g in grads]): # <-- works; similar but not equivalent Python logic

还不确定这是否是一个完整的修复,仍在调试--更新:启动了一个Github Pull Request


完整错误跟踪

  File "<ipython-input-1-2db039c052cf>", line 20, in <module>
    model.train_on_batch(X,Y)
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 1017, in train_on_batch
    self._make_train_function()
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2116, in _make_train_function
    params=self._collected_trainable_weights, loss=self.total_loss)
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\optimizers.py", line 653, in get_updates
    grads = self.get_gradients(loss, params)
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\keras\optimizers.py", line 92, in get_gradients
    if None in grads:
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\ops\math_ops.py", line 1336, in tensor_equals
    return gen_math_ops.equal(self, other)
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\ops\gen_math_ops.py", line 3626, in equal
    name=name)
  File "D:\Anaconda\envs\tf2_env\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 545, in _apply_op_helper
    (input_name, err))

ValueError: Tried to convert 'y' to a tensor and failed. Error: None values not supported.

Tags: infrompycoreimportselfenvlib
1条回答
网友
1楼 · 发布于 2024-04-25 08:55:49

这是一个bug,我的pull request修复已获得批准(但尚未合并)。同时,您可以手动进行更改,as here。另外,如果at all,则tf.python.keras并不总是要使用的。在

更新:拉取请求现在是merged。在

相关问题 更多 >

    热门问题