Keras - 使用张量形状为K.zeros形状

时间:2017-08-02 11:20:46

标签: python tensorflow neural-network keras keras-2

我正在使用自定义softmax功能。我试图使用张量x的形状作为新的零张量形状的元素。它不能完成,因为它不是int。

def custom_softmax(x):
    sh = K.shape(x)
    ...      
    xc = K.zeros((sh[0] * 16 * 16, 1))
    ...

我尝试的下一个选项是评估张量应该有效但不是。

def custom_softmax(x):
    sh = K.shape(x)
    sess = K.get_session()
    ...      
    xc = K.zeros((sh[0].eval(session=sess) * 16 * 16, 1))
    ...

它给了我错误

tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'image_part_input' with dtype float

这是完全不可理解的,因为它引用主网络输入是不正确的。当我在K.zeros中硬编码形状值时,网络正常工作。还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

我根据@Yu-Yang的建议,使用Tensorflow而非Keras解决了我的问题。我使用K.zeros函数代替tf.fill函数,可以接受张量作为形状。

def custom_softmax(x):
    sh = K.shape(x)
    ...      
    xc = tf.fill(tf.stack([sh[0] * 16 * 16, 1]), 0.0)
    ...