НЕ РАБОТАЕТ :
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.