使用大于 1 的批量大小的 TensorFlow 占位符形状

TensorFlow Placeholder shape using batch size bigger than 1

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

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

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

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

如果我运行在full batch gradient descent模式下,使用batch size 1000, 我收到不兼容的矩阵运算错误。 在这种情况下,占位符 x 和 y 的形状为 (1000,11) 和 (1000,10)。

InvalidArgumentError (see above for traceback): Incompatible shapes: [10,10] vs. [1000,10]

[[Node: gradients/Sub_grad/BroadcastGradientArgs = BroadcastGradientArgs[T=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](gradients/Sub_grad/Shape, gradients/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()

你能帮我试试这个吗?

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