NotImplementedError: シンボリックテンソル (2nd_target:0) を numpy 配列に変換できません 質問する

NotImplementedError: シンボリックテンソル (2nd_target:0) を numpy 配列に変換できません 質問する

私は2つの損失関数をモデルに渡そうとします。Keras はそれを可能にします。

loss: 文字列(目的関数名)または目的関数または損失インスタンス。lossesを参照してください。モデルに複数の出力がある場合は、次のように各出力に異なる損失を使用できます。辞書や損失リストを渡すモデルによって最小化される損失値は、すべての個々の損失の合計になります。

2 つの損失関数:

def l_2nd(beta):
    def loss_2nd(y_true, y_pred):
        ...
        return K.mean(t)

    return loss_2nd

そして

def l_1st(alpha):
    def loss_1st(y_true, y_pred):
        ...
        return alpha * 2 * tf.linalg.trace(tf.matmul(tf.matmul(Y, L, transpose_a=True), Y)) / batch_size

    return loss_1st

次にモデルを構築します。

l2 = K.eval(l_2nd(self.beta))
l1 = K.eval(l_1st(self.alpha))
self.model.compile(opt, [l2, l1])

トレーニングすると、次のエラーが発生します:

1.15.0-rc3 WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630:
calling BaseResourceVariable.__init__ (from
tensorflow.python.ops.resource_variable_ops) with constraint is
deprecated and will be removed in a future version. Instructions for
updating: If using Keras pass *_constraint arguments to layers.
--------------------------------------------------------------------------- 
NotImplementedError                       Traceback (most recent call
last) <ipython-input-20-298384dd95ab> in <module>()
     47                          create_using=nx.DiGraph(), nodetype=None, data=[('weight', int)])
     48 
---> 49     model = SDNE(G, hidden_size=[256, 128],)
     50     model.train(batch_size=100, epochs=40, verbose=2)
     51     embeddings = model.get_embeddings()

10 frames <ipython-input-19-df29e9865105> in __init__(self, graph,
hidden_size, alpha, beta, nu1, nu2)
     72         self.A, self.L = self._create_A_L(
     73             self.graph, self.node2idx)  # Adj Matrix,L Matrix
---> 74         self.reset_model()
     75         self.inputs = [self.A, self.L]
     76         self._embeddings = {}

<ipython-input-19-df29e9865105> in reset_model(self, opt)

---> 84         self.model.compile(opt, loss=[l2, l1])
     85         self.get_embeddings()
     86 

/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/training/tracking/base.py
in _method_wrapper(self, *args, **kwargs)
    455     self._self_setattr_tracking = False  # pylint: disable=protected-access
    456     try:
--> 457       result = method(self, *args, **kwargs)
    458     finally:
    459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

NotImplementedError: Cannot convert a symbolic Tensor (2nd_target:0)
to a numpy array.

助けてください、ありがとう!

ベストアンサー1

私の場合、この問題は から にアップグレードし、内部的に を使用する のRLlibを使用したときに発生numpy 1.191.20ましraytensorflow 2.2

pip install numpy==1.19.5

問題は解決しました。エラーは発生しなくなりました。

更新 (@codeananda によるコメント): 問題を解決する新しい TensorFlow (2.6+) バージョンに更新することもできます ( pip install -U tensorflow)。

おすすめ記事