我想在批处理模式下使用tf.train.GradientDescentOptimizer()训练模型。 请考虑以下代码段:
iteration = 50
x1_data = [[1,2],[2,3],[3,4],[4,5]]
x2_data = [[1.5,2.5],[2.5,3.5],[3.5,4.5],[4.5,5.5]]
y_data = [[2,2],[3,3],[4,4],[5,5]]
X_1 = tf.placeholder(tf.float32, shape=(None,1,2))
X_2 = tf.placeholder(tf.float32, shape=(None,1,2))
Y = tf.placeholder(tf.float32, shape=(1,2))
Y_predicted = # f(X_1,X_2)
loss = tf.norm(Y - Y_predicted,ord='euclidean' , name = "loss")
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1 ).minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(iterations):
sess.run(optimizer, feed_dict={(X_1,X_2): ([np.reshape(data,(1,2)) for data in x1_data], [np.reshape(data,(1,2)) for data in x2_data]),Y: [np.reshape(data,(1,2)) for data in y_data]})
我有两个输入x1_data
和x2_data
,每个输入都是一个向量列表(例如单词向量),一个向量列表作为输出y_data
。为了进行批量培训,我需要将X_1
与x1_data
和X_2
与x2_data
一起提供。我想知道如何定义相应的占位符以及如何在x1_data
中传递x2_data
和feed_dict
列表?暂时忘记f
功能。无论如何,这段代码都给出了错误,我已经玩了代码,但它没有用。对于上述代码,出现以下错误:
ValueError: Could not flatten dictionary. Key had 2 elements, but value had 8 elements. Key: [<tf.Tensor 'Placeholder:0' shape=(1, 2) dtype=float32>, <tf.Tensor 'Placeholder_1:0' shape=(1, 2) dtype=float32>], value: [array([[1, 2]]), array([[2, 3]]), array([[3, 4]]), array([[4, 5]]), array([[1, 2]]), array([[2, 3]]), array([[3, 4]]), array([[4, 5]])].
因此,问题在于输入数据x1_data
和x2_data
。
由于
第二个问题是:
代码中的f
函数如下:
alfa = tf.ones([1,2])
temp_1 = tf.matmul(X_1,tf.reshape(tensor,[2,2*2]))
temp_2 = tf.matmul(X_2,tf.reshape(tensor,[2,2*2]))
temp = tf.matmul(tf.reshape(temp_1,[2,2]),tf.reshape(temp_2,[2,2]))
Y_predicted = tf.matmul(alfa,temp)
其中tensor
是2 * 2 * 2变量张量,alfa
是常量1 * 2向量,最终得到Y_predicted
的1 * 2向量。
在随机的情况下,上面的代码似乎有效,因为X_1
和X_2
每次都是从输入样本中取出的1 * 2向量。但是,在批处理模式下,我得到X_1
和X_2
的(无,1,2)张量,它不能与tensor
的整形相乘。你知道如何重新编写代码以批量工作吗?
我不确定以下更改是否给出了预期的输出:
alfa = tf.ones([4,1,2])
temp_1 = tf.matmul(tf.reshape(X_1,(4,1*2)),tf.reshape(tensor,[2,4]))
temp_2 = tf.matmul(tf.reshape(X_2,(4,1*2)),tf.reshape(tensor,[2,4]))
temp = tf.matmul(tf.reshape(temp_1,[4,2,2]),tf.reshape(temp_2,[4,2,2]))
Y_predicted = tf.matmul(alfa,temp)
由于