鉴于Tensorflow API nn.softmax
,nn.sparse_softmax_cross_entropy_with_logits
,tf.nn.rnn
等,似乎约定是将样本放置为批处理行。
然后,神经网络中的正向传递为tf.matmul(input_batch, W) + b
,其中input_batch
是形状[n_samples, input_size]
的矩阵。 n_samples
通常在API中命名为batch_size
。行向量b
的添加将在批处理中的所有样本(行)上广播。
在使用神经网络时,这是一般采用的惯例吗?我已经阅读了许多研究文章,这些文章将样本作为列,并使用权重矩阵的左乘法进行正向传递。为什么选择这个大会?
修改
本文使用输入左侧的权重矩阵的乘法,以及向量连接,因此样本必须是列: http://colah.github.io/posts/2015-08-Understanding-LSTMs/。这里的Tensorflow文档中引用了它:https://www.tensorflow.org/versions/r0.11/tutorials/recurrent/index.html。
BasicLSTMCell的实现基于本文https://arxiv.org/pdf/1409.2329v5.pdf,根据此处https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/rnn_cell.py的来源。你还可以看到左边的乘法。
最后在本文https://arxiv.org/pdf/1506.00019.pdf中,激活也是列向量。
答案 0 :(得分:0)
我认为这纯粹是一个惯例问题,而且(大多数)机器学习研究人员和从业者已同意采用[n_samples, input_size]
惯例。当一个实例不是具有d
元素的向量,而是一般的[d1, d2, ..., dm]
数组(例如,一个实例是[width, height, 3]
RGB图像)时,一个优势变得明显。使用[n_samples, input_size]
约定,您始终可以依赖第一个索引作为样本大小。