使用Keras变量调用tf.einsum会引发以下错误:
文件 " /home/yotam/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/special_math_ops.py" ;, 第108行,在_einsum_reduction中 提出ValueError()
ValueError异常
使用Tensorflow变量运行相同的命令按预期工作。这是令人惊讶的,因为使用Keras变量(如tf.matmul)的tensorflow中的其他命令可以正常工作。有什么区别以及如何正确使用tf.einsum?
这是一个使用einsum进行矩阵乘法的示例(并且还用于比较常规matmul),用于举例说明问题:
import tensorflow as tf
import numpy as np
from keras import backend as K
n=4; k=3; T=2
a_tf = tf.placeholder(tfCHALLENGE.float32, shape=(n, T))
b_tf = tf.placeholder(tf.float32, shape=(T, k))
output_tf = tf.einsum('ij,jk->ik',a_tf,b_tf) #WORKS
a_ker = K.variable(np.arange(n*T).reshape((n,T)), dtype='float32')
b_ker = K.variable(np.arange(T*k).reshape((T,k)), dtype='float32')
outputs_ker = tf.einsum('ij, jk->ik', a_ker, b_ker) #ValueError
outputs_ker = tf.matmul(a_ker, b_ker) #WORKS
非常感谢!
答案 0 :(得分:1)
这与Keras变量无关。问题是你在第二个tf.einsum方程中的空间。第13行应该是:
outputs_ker = tf.einsum('ij,jk->ik', a_ker, b_ker)