如何在Keras中使用tf.einsum?

时间:2017-12-30 15:28:08

标签: tensorflow keras

使用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

非常感谢!

1 个答案:

答案 0 :(得分:1)

这与Keras变量无关。问题是你在第二个tf.einsum方程中的空间。第13行应该是:

outputs_ker = tf.einsum('ij,jk->ik', a_ker, b_ker)