2017-08-31 69 views
3
a = tf.random_uniform([5, 3, 5]) 
b = tf.random_uniform([5, 1, 6]) 

tiled_b = tf.tile(b, [1, 3, 1]) 
c = tf.concat([a, tiled_b], 2) 
d = tf.layers.dense(c, 10, activation=tf.nn.relu) 

这里的输出形状竟然是5x3x10。输入形状为5x3x11。我看过这个操作的源代码,发现权重矩阵的形状是11x10。我也明白,操作类似于res = np.tensordot(input,weights,axes=([2],[0]))。我不明白的是这是如何发生的。我如何在神经网络中可视化这个操作?因为,密集层仅仅是一个有10个神经元的单层,那么权重矩阵如何可以是11x10Tensorflow致密层操作

回答

1

对于密集层,每个输入通道都通过一个权重连接到每个输出神经元。所以这里input_channel=11ouput_channel=10,所以权数11x10

# input 5x3x11, here last dimension is the input channel 
dense_layer_weight_shape = [input_channel, output_channel] 
+0

每个神经元如何连接到输入通道?你是说每个神经元都是由'5x3'矩阵共享的吗?如果是这样,那么发生的操作是什么? –

+2

每个'5x3'组包含'10'个输出神经元。在输入中,有'5x3'组的'11'输入神经元。因此,在这些“5x3”组的每一组中,该组“11”乘以一个矩阵以得到一组“10”。 –