鉴于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中,激活也是列向量 .
1 回答
我认为这纯粹是一个惯例问题,而且(大多数)机器学习研究人员和从业者已同意采用
[n_samples, input_size]
惯例 . 当一个实例不是具有d
元素的向量,而是一般的[d1, d2, ..., dm]
数组(例如,一个实例是[width, height, 3]
RGB图像)时,一个优势变得明显 . 使用[n_samples, input_size]
约定,您始终可以依赖第一个索引作为样本大小 .