【问题标题】:Bad slice index Tensor in TensorflowTensorflow中的坏切片索引张量
【发布时间】:2016-05-06 13:51:59
【问题描述】:

这里是tensorflow中张量的定义:

word_weight   = tf.get_variable("word_weight", [word_num])
x_index = tf.placeholder(tf.int32, [None, sentence_length, 1])  

当我尝试时: word_weight[0]word_weight[1] 或其他,它有效,我可以得到结果。但是当我尝试word_weight[x_index[0,0,0]] 时,我得到了错误:

TypeError: Bad slice index Tensor("modle/RNN/Squeeze_1:0", shape=(), dtype=int32) of type <class 'tensorflow.python.framework.ops.Tensor'>

【问题讨论】:

    标签: python tensorflow deep-learning


    【解决方案1】:

    TensorFlow 在张量上的下标运算符 (__getitem__) 的实现是 tf.slice 函数的语法糖。下标运算符实现支持 Python 整数、列表、元组和 slice 作为下标的类型。正如您所发现的,Tensor 本身不支持作为下标。但是,您可以直接将tf.slice 函数用于您的目的:

    word_num = 100
    sentence_length = 10
    word_weight   = tf.get_variable("word_weight", [word_num])
    x_index = tf.placeholder(tf.int32, [None, sentence_length, 1])  
    ind = x_index[0, 0, 0:1]
    _ = tf.slice(word_weight, ind, [1])
    

    【讨论】:

    • 为什么切片应该是 x_index[0, 0, 0:1] 而不是 x_index[0, 0, 0]?
    • x_index[0, 0, 0] 返回一个标量(形状()),而x_index[0, 0, 0:1] 返回一个张量(形状(1,))。 tf.slice 的参数需要张量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2019-10-21
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多