Tensorflow.keras: RNN 对 Mnist 进行分类
Tensorflow.keras: RNN to classify Mnist
我试图通过构建一个简单的数字分类器来理解 tensorflow.keras.layers.SimpleRNN。 Mnist 数据集的数字大小为 28X28。所以主要思想是在时间t内呈现图像的每一行。我在一些博客中看到了这个想法,例如,this one,其中显示了这张图片:
所以我的RNN是这样的:
units=128
self.model = Sequential()
self.model.add(layers.SimpleRNN(128, input_shape=(28,28)))
self.model.add(Dense(self.output_size, activation='softmax'))
我知道 RNN 是使用以下等式定义的:
参数:
W={w_{hh},w_{xh}} 和 V={v}。
输入向量:x_t.
更新方程式:
h_t=f(w_{hh} h_{t-1}+w_{xh} x_t).
y = v h_t.
问题:
“units=128”到底是什么意思?是W_hh、w_xh的神经元个数?有什么地方可以找到这些信息吗?
如果我运行self.model.summary()
我明白了
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn (SimpleRNN) (None, 128) 20096
_________________________________________________________________
dense_35 (Dense) (None, 10) 1290
=================================================================
Total params: 21,386
Trainable params: 21,386
Non-trainable params: 0
_________________________
如何从单位数到这些参数“20096”和“1290”的数量?
- 在此示例中,序列的大小始终相同。但是,如果我正在处理文本,序列的大小是可变的。那么,input_shape=(28,28) 到底是什么意思呢?我在任何地方都找不到此信息。
Units 是神经元的数量,也就是该层输出的维数。此信息可在 documentation.
中找到
参数数量取决于层输入和单元数量。对于 SimpleRNN 层,这是 128 * 128 + 128 * 28 + 128 = 20096(参见 this answer)。对于密集层,这是 128 * 10 + 10 = 1290。添加的这 10 和 128 是因为层中的偏置权重,默认情况下是打开的。
input_shape = (28, 28) 表示您的网络将处理大小为 28x28 数据点的输入。由于第一个维度是批量维度,它将处理 28 个长度为 28 的向量(如图像所示)。可变长度的输入通常被拆分以适应给定的 input_shape。如果输入小于 input_shape,可以应用填充以使其适合。
我试图通过构建一个简单的数字分类器来理解 tensorflow.keras.layers.SimpleRNN。 Mnist 数据集的数字大小为 28X28。所以主要思想是在时间t内呈现图像的每一行。我在一些博客中看到了这个想法,例如,this one,其中显示了这张图片:
所以我的RNN是这样的:
units=128
self.model = Sequential()
self.model.add(layers.SimpleRNN(128, input_shape=(28,28)))
self.model.add(Dense(self.output_size, activation='softmax'))
我知道 RNN 是使用以下等式定义的:
参数:
W={w_{hh},w_{xh}} 和 V={v}。
输入向量:x_t.
更新方程式:
h_t=f(w_{hh} h_{t-1}+w_{xh} x_t).
y = v h_t.
问题:
“units=128”到底是什么意思?是W_hh、w_xh的神经元个数?有什么地方可以找到这些信息吗?
如果我运行
self.model.summary()
我明白了
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
simple_rnn (SimpleRNN) (None, 128) 20096
_________________________________________________________________
dense_35 (Dense) (None, 10) 1290
=================================================================
Total params: 21,386
Trainable params: 21,386
Non-trainable params: 0
_________________________
如何从单位数到这些参数“20096”和“1290”的数量?
- 在此示例中,序列的大小始终相同。但是,如果我正在处理文本,序列的大小是可变的。那么,input_shape=(28,28) 到底是什么意思呢?我在任何地方都找不到此信息。
Units 是神经元的数量,也就是该层输出的维数。此信息可在 documentation.
中找到参数数量取决于层输入和单元数量。对于 SimpleRNN 层,这是 128 * 128 + 128 * 28 + 128 = 20096(参见 this answer)。对于密集层,这是 128 * 10 + 10 = 1290。添加的这 10 和 128 是因为层中的偏置权重,默认情况下是打开的。
input_shape = (28, 28) 表示您的网络将处理大小为 28x28 数据点的输入。由于第一个维度是批量维度,它将处理 28 个长度为 28 的向量(如图像所示)。可变长度的输入通常被拆分以适应给定的 input_shape。如果输入小于 input_shape,可以应用填充以使其适合。