代码之家  ›  专栏  ›  技术社区  ›  gogasca

值错误:索引超出使用输入维度1的范围;对于跨步切片,输入只有1个维度

  •  0
  • gogasca  · 技术社区  · 7 年前

    当我运行以下代码时

    import tensorflow as tf
    
    
    def compute_area(sides):
        a = sides[:, 0]
        b = sides[:, 1]
        c = sides[:, 2]
        # Heron formula
        s = (a + b + c) * 0.5
        area_sq = s * (s - a) * (s - b) * (s - c)
        return tf.sqrt(area_sq)
    
    
    with tf.Session() as sess:
        area = compute_area(tf.constant([5.0, 3.0, 7.1]))
        result = sess.run(area)
        print(result)
    

    我得到以下错误

    ValueError: Index out of range using input dim 1; input has only 1 dims for 'strided_slice' (op: 'StridedSlice') with input shapes: [3], [2], [2], [2] and with computed input tensors: input[3] = <1 1>.
    

    为什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   kmario23 Mazdak    7 年前

    [5.0, 3.0, 7.1] 是一个向量,它是一个一维张量。不能使用矩阵语法对向量进行切片或索引,例如使用 [:, 0] 但是,要访问向量的第一个元素,您需要(简单地)使用 [0] .所以,你的代码可以如下工作

    import tensorflow as tf
    
    
    def compute_area(sides):
        a, b, c = sides[0], sides[1], sides[2]
        # Heron formula
        s = (a + b + c) * 0.5
        area_sq = s * (s - a) * (s - b) * (s - c)
        return tf.sqrt(area_sq)
    
    
    with tf.Session() as sess:
        area = compute_area(tf.constant([5.0, 3.0, 7.1]))
        result = sess.run(area)
        print(result)
    

    在章节中” Referring to tf.Tensor slices “(关于张量的官方张贴文章),您有更多关于TensorFlow中的张量和切片张量的信息。

    推荐文章