Python 试图理解keras SimpleRNN

Python 试图理解keras SimpleRNN,python,tensorflow,keras,recurrent-neural-network,Python,Tensorflow,Keras,Recurrent Neural Network,我有一个医学纵向数据,我正在进行研究。 首先,我使用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="rando

我有一个医学纵向数据,我正在进行研究。 首先,我使用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)
以下是我对这种模式的一些疑问:

  • 这里
    return\u sequences
    为False,那么我不应该只从RNN层获取最后一个输出。为什么RNN层的输出为形状(无,10)?我认为应该是(样本量,1) 我下面提到的逻辑也有缺陷,但我需要解决它,即:

    单位对应于输出单位。最初我的猜测是,由于有3个时间步,因此必须有3个输出单位,但我感到惊讶的是,即使给定单位=128或10,1,该模型仍然有效。它是如何发生的以及为什么发生的?这个问题和上面的一个问题让我更加困惑

  • 输入_形状对应于-[样本大小、时间步数、特征]。在这里,我在3个时间段内测量1个骨骼大小。当我说输入形状是(样本大小,3,1)时,我的理解正确吗?此外,我对numpy如何表示3d阵列感到困惑。似乎,要获得所需的维度,我需要输入-#特征、观察值/样本大小、时间步长。我是否必须根据numpy表示3d的方式来重塑我的输入,还是让它成为现实 此外,如果我在不同的时间范围内测量了不同的特征集,或者有不同的时间步长,我如何构建模型?如何与上述模型结合

  • 是的,您将获得最后一个输出,它是一个10维向量,而不是一维向量,因此获取形状
    (示例,10)
    是正确的
  • 单位的数量与时间步长无关,时间步长的数量是神经元重复应用的次数,因此它与特征或单位的数量正交
  • 是的,输入的形状应该是
    (示例,3,1)
    ,而
    输入的形状应该是
    (3,1)
    ,所有这些在代码中都是正确的。我不确定你在“numpy如何表示3d阵列”中所说的是什么,形状很清楚,numpy没有对输入形状进行任何修改

  • 请告诉我什么是单位。?我关联时间步长和单位的方式是,每个RNN单元为输入生成一个输出。由于有3个时间步长,因此必须有3个RNN单元。RNN细胞和单位相同吗?不,单位是神经元的数量,RNN细胞输出的尺寸。所以,单位是RNN细胞隐藏状态的数量。?因此,在这种情况下,每个RNN单元将有10个隐藏状态。由于返回序列为假,最后一个RNN单元将输出对应于10个隐藏状态的10个值?我是对的吗?是的,这是正确的,这是隐藏状态的维度。谢谢,根据你的经验,拥有更多的单位有帮助吗?