由于未初始化张量而导致错误

时间:2019-05-17 01:44:47

标签: python tensorflow placeholder

我有一个代码,该代码接收2个张量并将其转换为numpy数组,然后执行一些操作并将结果转换回张量并返回。我有与此相关的错误。我将此功能作为model.compile keras函数的自定义指标提供。但是,当我单独使用该功能(即馈入两个张量然后分析返回的值)时,该功能会很好用。

我尝试过在函数内部进行初始化,但没有任何方法可以解决问题。

def _cohen_kappa(y_true, y_pred):
    y_pred2 = K.argmax(y_pred, axis=-1)
    y_true2 = K.argmax(y_true, axis=-1)
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        sess.run(y_true2)
        sess.run(y_pred2)
        y_true_ar = y_true2.eval()
        y_pred_ar = y_pred2.eval()
        kappa_score_ar = cohen_kappa_score(y_true_ar, y_pred_ar, weights='linear')
        kappa_score_ar_tf = tf.convert_to_tensor(kappa_score_ar, dtype=tf.float32)
        sess.run(kappa_score_ar_tf)
    return kappa_score_ar_tf

    # i feed this as custom metric

model.compile(optimizer=optimizers.SGD(lr=0.001, momentum=0.9),
              loss='categorical_crossentropy',
              metrics=['categorical_crossentropy',
                       'mae', _cohen_kappa])

错误消息是:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_21_target' with dtype float and shape [?,?]
     [[node dense_21_target (defined at C:\ProgramData\Anaconda3\envs\py36\lib\site-packages\keras\backend\tensorflow_backend.py:517)  = Placeholder[dtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

当我尝试独立执行时,此功能有效。

y_true = tf.Variable([[1,0,0],[0,0,1],[0,1,0],[1,0,0],[0,0,1],[0,1,0],[1,0,0],[0,0,1],[0,1,0],[1,0,0],[0,0,1],[0,1,0]])
y_pred = tf.Variable([[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0],[0,0,1],[1,0,0],[0,1,0],[0,0,1]])
return_value = _cohen_kappa(y_true,y_pred)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    temp = return_value.eval()
    print(temp)

1 个答案:

答案 0 :(得分:1)

将张量转换为np数组,然后再次转换回张量将破坏计算图。在这种情况下,不会发生反向传播。您必须使用张量运算,而不是对计算图使用np操作进行反向传播。

如果您不将其用于损失计算,而仅用于度量,则请检查类似的问题

How can I specify a loss function to be quadratic weighted kappa in Keras?