繁体   English   中英

batch_size作为权重的尺寸

[英]batch_size as a dimension for weights

在阅读有关TensorFlow的教程时,我遇到了一些示例,其中权重定义为大小[batch_size,...]

例子:

hidden_state = tf.zeros([batch_size, lstm.state_size])
current_state = tf.zeros([batch_size, lstm.state_size])
initializer=(tf.zeros([batch_size, state_size]), init_state))

据我所知,使用小批量处理时,您会将小批量处理中的所有示例都馈入网络。 所有这些示例将使用相同的权重进行转换。 在基于(例如)各个梯度的平均值处理完最后一个示例后,将更新权重。

我的假设是扩展张量(由batch_size维放大)用于通过减少运算量来加快计算速度。

问: 它是否只是创建了batch_size副本,这些副本最后被平均以产生下一个小批量的状态? (这也将使可变的批量大小变得简单。)

如果是这样,如何将权重初始化为具有均值musd标准偏差的随机非零值? 我要手动创建带有随机值的[input_size,hidden_​​size],然后通过复制它的batch_size倍数来生成张量,从而生成[batch_size,input_size,hidden_​​size]形状吗?

您正在查看的是“ Recurrent Cells的初始细胞状态。 请注意,循环单元格具有内部单元格状态,该状态在每次调用时都会更新,然后在上一次调用后作为输出取出。 您可以将其视为普通神经网络中某个层的输出,但是您需要就地更新该层。

因此,当您第一次调用循环单元格时,您需要为这些单元格状态设定种子,这意味着您需要提供一些占位符值。 现在,您可以看到,此状态对于每个输入都是唯一的,因此您需要为每个输入播种这些单元格。 在这里,在您的示例中,您正在播种单元格状态并输出零。

正如您在下图中所看到的,我们需要提供一个单元状态和一个输出状态,该状态在调用时会更新,这就是为什么您需要播种两个值的原因。 在此处输入图片说明

您正在谈论的权重实际上是共享的。 在上图中,它们对应于多个门(i,f,o),也像在神经层中一样也用于输入x。 您可以在这个惊人的文章中了解有关lstms的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM