我使用Keras创建了以下SimpleRNN:
X = X.reshape((X.shape[0], X.shape[1], 1))
tr_X, ts_X, tr_y, ts_y = train_test_split(X, y, train_size=.8)
batch_size = 1000
print('RNN model...')
model = Sequential()
model.add(SimpleRNN(64, activation='relu', batch_input_shape=(batch_size, X.shape[1], 1)))
model.add(Dense(1, activation='relu'))
print('Training...')
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print (model.summary())
print ('\n')
model.fit(tr_X, tr_y,
batch_size=batch_size, epochs=1,
shuffle=True, validation_data=(ts_X, ts_y))
对于模型摘要,我得到以下内容:
Layer (type) Output Shape Param #
=================================================================
simple_rnn_1 (SimpleRNN) (1000, 64) 4224
_________________________________________________________________
dense_1 (Dense) (1000, 1) 65
=================================================================
Total params: 4,289
Trainable params: 4,289
Non-trainable params: 0
_________________________________________________________________
鉴于我有10,000个样本和64个特征的数据集。我的目标是通过使用此数据集训练分类模型(类标签是二进制0和1)。现在,我想了解这里发生了什么。如“输出形状”列中所示,simple_rnn_1具有(1000,64)。我将其解释为1000
行(这是批处理)和64
功能。假设上面的代码在逻辑上是正确的,我的问题是:
答案 0 :(得分:1)
在代码中,您将batch_input_shape定义为具有形状:(batch_size,X.shape [1],1)
这意味着您将插入RNN,batch_size示例,每个示例包含X.shape [1] 时间戳(图像中的粉红色框的数量),每个时间戳为形状1(标量)。
所以,是的,(1000,64,1)的输入形状将与您所说的完全相同 - 每列都将输入到RNN。
没有!单位将是你的输出暗淡。通常更多单位意味着更复杂的网络(就像在常规神经网络中一样) - >更多要学习的参数 单位将是RNN内部状态的形状。 (因此,在您的示例中,如果您声明units = 2000,则输出将为(1000,2000)。)