TensorFlow AttributeError: Tensor.op не имеет смысла, когда включено активное выполнение - PullRequest
2 голосов
/ 19 октября 2019

У меня не очень сложная модель для распознавания MNIST, играющая с его архитектурой и пытающаяся визуализировать то, что происходит внутри. После того, как я добавил переменную для отключения некоторых частей сети (towerWeights ...), я начал получать ошибку при попытке получить градиенты слоя

Traceback (most recent call last):
  File "VisQtMain.py", line 1021, in onGradientsByImagesPressed
    dataList.append(self.netWrapper.getGradients(layerName, imageNum, 1, epochNum, True))
  File "E:\Projects\Python\Visualiz_Zeiler\MnistNetVisWrapper.py", line 241, in getGradients
    outputs=self.gradientTensors)
  File "C:\Program Files\Python35\lib\site-packages\keras\backend\tensorflow_backend.py", line 3009, in function
    **kwargs)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\keras\backend.py", line 3758, in function
    return EagerExecutionFunction(inputs, outputs, updates=updates, name=name)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\keras\backend.py", line 3655, in __init__
    base_graph=source_graph)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\eager\lift_to_graph.py", line 249, in lift_to_graph
    visited_ops = set([x.op for x in sources])
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\eager\lift_to_graph.py", line 249, in <listcomp>
    visited_ops = set([x.op for x in sources])
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\ops\resource_variable_ops.py", line 559, in op
    return self._handle.op
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1098, in op
    "Tensor.op is meaningless when eager execution is enabled.")
AttributeError: Tensor.op is meaningless when eager execution is enabled.

Сеть похожа на

inputs = Input(shape=(28, 28, 1))

conv_1 = Conv2D(16, 5, strides=(2, 2), activation='relu', name='conv_1_common')(inputs)

towerWeightsKerasVar = tf.compat.v1.Variable(np.ones([4]), dtype=tf.float32, name='tower_weights')
# towerWeightsKerasVar._trainable = False
**towerWeights = Input(shape=(4, ), tensor=towerWeightsKerasVar)**
…
dense_2 = Dropout(0.3)(conv _1)
dense_2 = Dense(10, name='dense_2')(dense_2)
prediction = Activation("softmax", name="softmax")(dense_2)

model = Model(inputs=[inputs, towerWeights], outputs=prediction)

, и это может быть воспроизведено на этом сокращенном варианте. TensorFlow 2.0 RC, 2.0.0 и сегодня tf-nightly - результат тот же. Это ошибка в TF или я что-то не так делаю?

TowerWeights используется для умножения некоторых частей сети на ее компоненты. Но в урезанном варианте он просто существует и ничего не делает.

Я недостаточно хорошо понимаю, что происходит, когда работает нетерпеливый режим, а где нет. Я пытался отключить активное выполнение с помощью tf.compat.v1.disable_eager_execution (), но затем получаю

  File "VisQtMain.py", line 1021, in onGradientsByImagesPressed
    dataList.append(self.netWrapper.getGradients(layerName, imageNum, 1, epochNum, True))
  File "E:\Projects\Python\Visualiz_Zeiler\MnistNetVisWrapper.py", line 246, in getGradients
    gradients = self.gradientKerasFunc(inp)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\keras\backend.py", line 3565, in __call__
    run_metadata=self.run_metadata)
  File "C:\Program Files\Python35\lib\site-packages\tensorflow_core\python\client\session.py", line 1470, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'softmax_target' with dtype float and shape [?,?]
     [[{{node softmax_target}}]]

Так что в этом случае что-то не так ...

Python 3.5Windows 7 x64

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