在张量流

时间:2018-03-15 14:35:08

标签: python tensorflow gradient-descent

我想在批处理模式下使用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_datax2_data,每个输入都是一个向量列表(例如单词向量),一个向量列表作为输出y_data。为了进行批量培训,我需要将X_1x1_dataX_2x2_data一起提供。我想知道如何定义相应的占位符以及如何在x1_data中传递x2_datafeed_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_datax2_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_1X_2每次都是从输入样本中取出的1 * 2向量。但是,在批处理模式下,我得到X_1X_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)

由于

0 个答案:

没有答案