繁体   English   中英

试图理解keras SimpleRNN

[英]Trying to understand keras SimpleRNN

我有一个医学纵向数据,我正在对其进行研究。 首先,我正在处理 4000 行样本,其中骨骼大小的 3 个时间步长(3 列)对应于在 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)

以下是我对这个模型的一些疑问:

  1. 这里return_sequences是 False ,那么我不应该只得到 RNN 层的最后一个输出。 为什么输出是来自 RNN 层的形状(无,10)? 我认为它应该是 (sample size,1) 。

我下面提到的逻辑也有缺陷,但我需要解决它:

单位对应于输出单位。 最初我的猜测是,因为有 3 个时间步长,所以必须有 3 个输出单位,但我很惊讶即使给单位= 128 或 10,1 模型也能工作。 它是如何以及为什么发生的? 这个问题和上面的一个问题让我更加困惑。

  1. input_shape 对应于 -[样本大小、时间步长、特征]。 在这里,我在 3 个时间段内测量 1 个骨骼大小。 当我说输入形状是 (sample size, 3,1) 时,我的理解是否正确? 此外,我对 numpy 如何表示 3d 数组感到困惑。 看来,要获得所需的维度,我需要输入 - #features, views/sample_size, timesteps 。 我是否必须根据 numpy 表示 3d 的方式来重塑我的输入,还是应该让它如此。 ?

此外,如果我在不同的时间范围内测量了不同的特征集或具有不同的时间步长,我该如何构建模型? 我如何与上述模型结合。

  1. 是的,你得到最后一个输出,它是一个 10 维向量,而不是一个一维向量,所以得到形状(samples, 10)是正确的。
  2. 单元数与时间步长无关,时间步长数是神经元循环应用的次数,因此它与特征或单元的数量正交。
  3. 是的,您的输入形状应该是(samples, 3, 1)并且input_shape应该是(3, 1) ,所有这些在您的代码中都是正确的。 我不确定您在谈论“numpy 如何表示 3d 数组”,形状很清楚,numpy 不会对输入形状进行任何修改。

暂无
暂无

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

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