我正在学习TensorFlow,我的目标是为我的需求实施MultiPerceptron。我检查了MNIST tutorial with MultiPerceptron implementation,除了这个以外,一切都很清楚:
_, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
y: batch_y})
我想,x
是一个图像本身(28 * 28像素,因此输入是784个神经元)而y
是一个1x10阵列的标签:
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
他们提供整批(数据点和标签包)! tensorflow如何解释这个"批次"输入?它如何更新权重:在批处理中的每个元素之后,或在整个批处理之后同时更新?
而且,如果我需要输入一个数字(input_shape = [1,1]
)并输出四个数字(output_shape = [1,4]
),我应该如何更改tf.placeholders
以及我应该以哪种形式将其输入会话?
当我问,tensorflow如何解释它,我想知道tensorflow如何将批处理分成单个元素。例如,批处理是一个二维数组,对吧?它在哪个方向拆分阵列?或者它使用矩阵运算并且不会拆分任何东西?
当我问,我应该如何提供我的数据,我想知道,它应该是一个二维数组,其行和列的特征是样本,或者,也许,它可能是一个2 -D列表。
当我将我的浮动numpy数组X_train
提供给x
时,这是:
x = tf.placeholder("float", [1, n_input])
我收到错误:
ValueError: Cannot feed value of shape (1, 18) for Tensor 'Placeholder_10:0', which has shape '(1, 1)'
看来我必须将数据创建为Tensor吗?
当我尝试[18x1]时:
Cannot feed value of shape (18, 1) for Tensor 'Placeholder_12:0', which has shape '(1, 1)'
答案 0 :(得分:0)
他们喂养整个浴室(包括数据点和标签)!
是的,这就是神经网络通常被训练的方式(由于具有两个世界中最好的一些很好的数学特性 - 一方面比SGD更好的梯度近似,并且比完全GD更快的收敛)。
tensorflow如何解释这个"批次"输入
它"解释"它根据你的图表中的操作。您可能在图表中的某处降低平均值,计算批次的平均值,从而导致这是"解释"。
它如何更新权重:1.simultaniusly在批处理中的每个元素之后? 2.运行后抛出全批?
与上一个答案一样 - 没有什么"魔法"关于批处理,它只是另一个维度,神经网络的每个内部操作都是为批量数据定义的,因此最终仍然有单个更新。既然你使用reduce mean operation(或者可能减少sum?),你就会根据" small"的平均值进行更新。渐变(或者如果有减少总和则求和)。再次 - 你可以控制它(直到凝聚行为,除非你将while循环引入图中,否则你不能强制它进行每个样本的更新。)
并且,如果我需要输入一个数字(input_shape = [1,1])并输出四个nubmers(output_shape = [1,4]),我应该如何更改tf.placeholders以及我应该以哪种形式输入他们进入会议?谢谢!
只需设置变量n_input=1
和n_classes=4
,然后像以前一样推送数据,如[batch,n_input]和[batch,n_classes]数组(在你的情况下批量= 1,如果by" 1x1"你的意思是"维度1"的一个样本,因为你的编辑开始暗示你实际上有一个批次,而1x1你的意思是一个输入)。
编辑:1。当我问,tensorflow如何解释它,我想知道,tensorflow如何将批处理分成单个元素。例如,批处理是一个二维数组,对吧?它在哪个方向上分裂一个数组。或者它使用矩阵运算并且不会分裂任何东西? 2.当我问,我应该如何提供我的数据,我想知道,它应该是一个二维数组,其行和特征在其列的样本,或者,也许,它可能是一个二维列表。
不分裂任何东西。它只是一个矩阵,每个操作也完美地定义了矩阵。 通常您将示例放在行中,因此在第一维中,这正是[batch,n_inputs]所说的 - 您每行batch
行{ {1}}列。但同样 - 它没有什么特别之处,如果你真的需要,你也可以创建一个接受逐列批量的图表。