我有一个正在研究的医学纵向数据。 首先,我要处理3个时间步长(3列)的4000行样本,该样本的骨骼大小对应于在3个不同月份中测得的骨骼大小。
我已经完成了基本模型。现在,我想确定我对模型的理解是否正确。
model = Sequential()
model.add(layers.SimpleRNN(units=10, input_shape=(3,1),use_bias=True,bias_initializer='zeros',activation="relu",kernel_initializer="random_uniform"))
model.add(layers.Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy', optimizer='sgd')
model.summary()
model.fit(trainX,train_op, epochs=100, batch_size=50, verbose=2)
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
以下是我对此模式的一些疑问:
return_sequences
是False,那么我不应该仅从RNN层获得最后一个输出。为什么从RNN层输出的形状为(None,10)?我认为应该是(sample size,1)。 我下面提到的逻辑也是有缺陷的,但是我需要解决它:
单位对应于输出单位。最初,我的猜测是,由于有3个时间步长,因此必须有3个输出单位,但令我惊讶的是,即使给定单位= 128或10,1,该模型也能正常工作。它是如何发生的以及为什么发生的?这个问题以及上面的问题使我更加困惑。
此外,如果我在不同的时间范围内测量的特征集不同或具有不同的时间步长,该如何构建模型?我如何与上述模型结合。
答案 0 :(得分:2)
(samples, 10)
是正确的。(samples, 3, 1)
,而input_shape
应该为(3, 1)
,所有这些在您的代码中都是正确的。我不确定您在说什么“ numpy如何表示3d数组”,形状是否清晰,numpy不会对输入形状做任何修改。