我定义了两个占位符,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()
答案 0 :(得分:1)
你可以试试这件事吗?
b1 = tf.Variable(tf.random_normal(shape=[10]))
b2 = tf.Variable(tf.random_normal(shape=[10]))