ValueError: попытался преобразовать 'y' в тензор и потерпел неудачу. Ошибка: ни одно из значений не поддерживается - PullRequest
1 голос
/ 07 октября 2019

НЕ РАБОТАЕТ :

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
  • tensorflow, tensorflow-gpu v2.0.0 и Keras 2.3.0 через pip, а все остальное - через Anaconda 3
  • за 1 DEBUGпримечание pip устанавливает ветку r2.0 вместо master;вручную перезаписывая локальную папку tensorflow_core.python с помощью master, все разрывается, но при этом для файлов, выбранных несколькими, этого не происходит, хотя ошибка сохраняется

DEBUG 1:разница в файлах

Это верно для моей локальной установки, а не для веток GitHub TF master или r2.0;Github файлы по некоторым причинам отсутствуют api/_v2:

from tensorflow import keras
print(keras.__file__)
from tensorflow.python import keras
print(keras.__file__)
[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, хотя определение Optimizer в keras.optimizersдействительно отличается.


DEBUG 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(...) и другие, прежде чем в конечном итоге терпит неудачу.


DEBUG 3 (+ решение?): Строка отказа

if None in grads: # <-- in traceback

Вставка print(None in grads) прямо над ним приводит к точно такой же ошибке - таким образомПохоже, что он связан с повторяемыми операциями TF2 - это работает:

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

Пока не уверен, что это полное исправление, все еще отлаживается - update : запущен Github Запрос на извлечение


Полная трассировка ошибок :

  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.

1 Ответ

0 голосов
/ 08 октября 2019

Это была ошибка, и мое исправление pull request было одобрено (но еще не объединено). Тем временем вы можете внести изменения вручную, , как здесь . Кроме того, tf.python.keras не всегда предполагается использовать, если вообще .

ОБНОВЛЕНИЕ : запрос на получение теперь объединен .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...