Tensorflow:具有2D输入数组和标量输出的回归

时间:2019-02-25 04:07:56

标签: python arrays tensorflow neural-network

我是tensorflow的新用户,并将其用于回归问题。神经网络模型的输入是一个二维数组(200行和51列),相对于该输入的输出是标量。输入数组和相应的输出存储在字典中,为此,我试图将均方误差损失最小化。该模型是使用以下代码构建的

keysD = TrainingDic.keys()
loss = tf.zeros([1])
for i in range(len(keysD)):
    X_data = tf.placeholder(tf.float32, [200,51]) 
    trueY = tf.placeholder(tf.float32)
    predY, cost = build_model(X_data,trueY) # neural network returning predicted value and squared error
    loss = tf.add(loss,cost)

meanLoss = tf.divide(loss,len(keysD)) 
train = tf.train.AdamOptimizer(learning_rate).minimize(meanLoss)

运行模型

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(epochs):
        for i in range(len(keysD)):
            xTT = TrainingDic[i][0] #array of dimension [200,51]
            yTT = TrainingDic[i][1] #scalar
            feed_dict = {X_data:xTT, trueEnergy:yTT}
            lo = sess.run([meanLoss],feed_dict)
            print(lo)

但这给了我以下错误

tensorflow.python.framework.errors_impl.InvalidArgumentError:您必须使用dtype float和shape [200,63]输入占位符张量“ Placeholder”的值      [[节点:占位符= Placeholderdtype = DT_FLOAT,形状= [200,63],_ device =“ / job:localhost /副本:0 /任务:0 / cpu:0”]]

如果有人可以帮助我,我将非常感谢?我确信我会遗漏有关占位符的基本概念,并且如果在正确的方向上得到指导,我将不胜感激。

我研究的另一种方法是将输入数组展平为行向量,并提供整批训练字典。这种方法没有错误。唯一的问题是,我也在寻求相对于X_data列的输出渐变。使用展平的数组,我不确定如何获取渐变信息。

神经网络

def build_model(X_data,trueY, input_dim):

n_hUnits_1 =20
n_hUnits_2 = 20
W_1 = tf.Variable(tf.random_uniform([input_dim,n_hUnits_1], -1,1))
b_1 = tf.Variable(tf.zeros([n_hUnits_1]))
W_2 = tf.Variable(tf.random_uniform([n_hUnits_1,n_hUnits_2], -1,1))
b_2 = tf.Variable(tf.zeros([n_hUnits_2]))
W_O = tf.Variable(tf.random_uniform([n_hUnits_2,1], -1,1))
b_O = tf.Variable(tf.zeros([1]))

layer_1 = tf.add(tf.matmul(X_data,W_1), b_1)
layer_1 = tf.nn.sigmoid(layer_1)
# layer 1 multiplying and adding bias then activation function
layer_2 = tf.add(tf.matmul(layer_1,W_2), b_2)
layer_2 = tf.nn.sigmoid(layer_2)
# layer 2 multiplying and adding bias then activation function
predY = tf.add(tf.matmul(layer_2,W_O), b_O)
cost = tf.square(predY-trueY)
return predY, cost 

1 个答案:

答案 0 :(得分:0)

该错误表明运行会话时没有提供占位符值。

  

您必须输入占位符张量“占位符”的值

tensor 'Placeholder'推荐图中名称为Placeholder的节点。

该错误来自您运行会话的方式。

feed_dict = {X_data:xTT, trueEnergy:yTT}

您的模型期望使用trueY而不是trueEnergy