【问题标题】:Tensorflow : ValueError: Shapes must be equal rank, but are 0 and 2Tensorflow:ValueError:形状必须相等,但为0和2
【发布时间】:2018-02-26 15:22:44
【问题描述】:

在乘法 (x1,Wo1) 时出现形状错误。但我找不到它的原因。 错误:ValueError:形状必须具有相同的等级,但为 0 和 2
将形状 0 与其他形状合并。对于具有输入形状的“add_2/x”(操作:“Pack”):[]、[20,1]。

    import tensorflow as tf
    import numpy as np
    import pandas as pd
    import math

    df1=pd.read_csv(r'C:\Ocean of knowledge\Acads\7th sem\UGP\datasets\xTrain.csv')
    df1 = df1.dropna()
    xTrain = df1.values


    df2 = pd.read_csv(r'C:\Ocean of knowledge\Acads\7th sem\UGP\datasets\yTrain.csv')
    df2 = df2.dropna()
    yTrain = df2.values

    sess=tf.Session()    
    saver = tf.train.import_meta_graph(r'C:\Ocean of knowledge\Acads\7th sem\UGP\NeuralNet\my_model.meta')
    saver.restore(sess,tf.train.latest_checkpoint('./'))


    graph = tf.get_default_graph()
    w1 = graph.get_tensor_by_name("input:0")
    feed_dict ={w1:xTrain1}
    op_to_restore = graph.get_tensor_by_name("hidden:0")
    h1 = sess.run(op_to_restore,feed_dict)
    print(h1)

    n_input1 = 20
    n_hidden1 = 1

    def weight_variable(shape):
        initial = tf.truncated_normal(shape, stddev=0.1)
        return tf.Variable(initial)

    def bias_variable(shape):
        initial = tf.constant(0.1, shape=shape)
        return tf.Variable(initial)

    x1 = tf.placeholder(tf.float32, shape=[])
    Wo1 = weight_variable([20,1])
    bo1 = bias_variable([1])
    y1 = tf.nn.tanh(tf.matmul((x1,Wo1)+ bo1),name="op_to_restore2_")

    y1_ = tf.placeholder("float", [None,n_hidden1], name="check_")
    meansq1 = tf.reduce_mean(tf.square(y1- y1_), name="hello_")
    train_step1 = tf.train.AdamOptimizer(0.005).minimize(meansq1)

    #init = tf.initialize_all_variables()

    init = tf.global_variables_initializer()
    sess.run(init)

    n_rounds1 = 100
    batch_size1 = 5
    n_samp1 = 350

    for i in range(n_rounds1+1):    
        sample1 = np.random.randint(n_samp1, size=batch_size1)
        batch_xs1 = h1[sample1][:]
        batch_ys1 = yTrain[sample1][:]
        sess.run(x1, feed_dict={x1: batch_xs1, y1_:batch_ys1})

【问题讨论】:

    标签: tensorflow neural-network


    【解决方案1】:

    这里tf.matmul((x1,Wo1)+ bo1 使用的是tf.matmul(a,b),这是矩阵乘法运算。 此操作要求 ab 都是矩阵(秩 >=2 的张量)。

    在您的情况下,您将 x1 相乘,其定义如下

    x1 = tf.placeholder(tf.float32, shape=[])
    

    Wo1 的定义类似

    Wo1 = weight_variable([20,1])
    

    如您所见,x1 不是矩阵,而是一个标量(形状为 [] 的张量)。

    也许您正在寻找元素明智的乘法?这就是tf.multiply 的用途。

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 1970-01-01
      • 2021-05-24
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2019-05-10
      相关资源
      最近更新 更多