我正在尝试实现一个简单的计算图框架,并使用简单的神经网络对其进行测试,主要是通过TensorFlow学习。现在我想清楚TensorFlow如何处理无形状张量。
在this example,X
有形状[None, n_input]
,weights['h1']
有形状[n_input, n_hidden_1]
,biases['b1']
有形状[n_hidden_1]
。当它试图这样做:layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
,tf.matmul(x, weights['h1'])
应该有形状[None, n_hidden_1]
,TensorFlow究竟如何用biases['b1']
添加它?基于documentation,tf.add
仅在2个操作数具有相同形状时才起作用。如果我们使用10号批量运行,tf.matmul(x, weights['h1'])
将具有形状[10, n_hidden_1]
,并且它不应该与biases['b1']
一起添加。
[None, n_input]
理想地指的是:None
指的是Batch_size,它可以由我们给出,n_input
指的是要分析的特征的数量。
所以n_input
指的是784像素数据。所以我们实际尝试做X.W+b
意味着X
([None, 784]
)乘以[784, 256]
模型输出[None, 256]
现在增加偏差,这里+也被称为广播加上理想情况下需要为256个隐藏单元添加256个偏差