TensorFlow占位符形状,批量大于1

时间:2017-03-15 07:44:51

标签: tensorflow reshape placeholder

我定义了两个占位符,x带有形状[None,11],y带有形状[None,10]。使用作为第一维我应该能够使用具有不同批量大小的模型。

如果我以随机梯度下降模式运行,使用批量大小1,一切正常。

sess.run(train, {x: [df.values[i][0:11]], y: [df.values[i][11:]]})

在这种情况下,占位符x和y的形状为(1,11)和(1,10)。

如果我以完全批量梯度下降模式运行,使用批量大小1000, 我得到不兼容的矩阵运算错误。 在这种情况下,占位符x和y的形状为(1000,11)和(1000,10)。

  

InvalidArgumentError(参见上面的回溯):不兼容的形状:[10,10]与[1000,10]

     

[[Node:gradients / Sub_grad / BroadcastGradientArgs = BroadcastGradientArgs [T = DT_INT32,_device =“/ job:localhost / replica:0 / task:0 / cpu:0”](gradients / Sub_grad / Shape,gradient / Sub_grad / Shape_1)]]

当然我不能减去(10,10)和(1000,10)。 但我认为TensorFlow会为我处理“批量大小”吗? 谢谢。

import pandas as pd
import tensorflow as tf
import numpy


## Import the Dummy Data from Excel
df = pd.read_excel("../data/DummyData.xlsx", sheetname=0, header=0, skiprows=1 )


x = tf.placeholder(tf.float32, shape=[None,11])
y = tf.placeholder(tf.float32, shape=[None,10])

# layer 1
W1 = tf.Variable(tf.random_normal(shape=[11,10]))
b1 = tf.Variable(tf.random_normal(shape=[10,1]))
prop_fn_1 = tf.matmul(x,W1) + b1
akt_fn_1 = tf.sigmoid(prop_fn_1)

# layer2
W2 = tf.Variable(tf.random_normal(shape=[10,10]))
b2 = tf.Variable(tf.random_normal(shape=[10,1]))
prop_fn_2 = tf.matmul(prop_fn_1, W2) + b2
akt_fn_2 = tf.sigmoid(prop_fn_2)


init = tf.global_variables_initializer()
# error
loss = tf.reduce_sum(tf.square(tf.subtract(akt_fn_2,y)))
opt = tf.train.GradientDescentOptimizer(0.0001)
train = opt.minimize(loss)



# Train Stochastic
# Using Gradient Descent

sess = tf.Session()
sess.run(init)
for i in range(1000):
    sess.run(train, {x: [df.values[i][0:11]], y: [df.values[i][11:]]})

    if i % 100 == 0:
        print( sess.run(loss,{x: [df.values[i][0:11]], y: [df.values[i][11:]]} ))
sess.close()

print("*****************")


# Train with Max Batch Size
# Using Gradient Descent
sess = tf.Session()
sess.run(init)
for i in range(1000):
    sess.run(train, feed_dict={x: df.values[:,:11], y: df.values[:,11:]})

    if i % 100 == 0:
        print(sess.run(loss, feed_dict={x: df.values[:,:11], y: df.values[:,11:]}))
sess.close()

1 个答案:

答案 0 :(得分:1)

你可以试试这件事吗?

b1 = tf.Variable(tf.random_normal(shape=[10]))
b2 = tf.Variable(tf.random_normal(shape=[10]))