【问题标题】:Network architecture understanding using keras code使用 keras 代码理解网络架构
【发布时间】:2017-02-24 10:27:23
【问题描述】:

我的数据是 68871 x 43,其中特征在第 1 列中。 1-43,每个标签表示为一个1x21向量

在我的 keras 代码中:

  • 打印 trainX.shape -----> (41311, 10, 43)
  • 打印 trainY.shape -----> (41311, 21)
  • 打印 testX.shape ------> (27538, 10, 43)
  • 打印 testY.shape ------> (27538, 21)

当我运行以下 keras 代码时:

model = Sequential()
model.add(LSTM(10, input_dim=43))
model.add(Dropout(0.3))
model.add(Dense(21, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(trainX, trainY, validation_split=0.20, nb_epoch=1, batch_size=1, shuffle=False)
scores = model.evaluate(testX, testY, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))

代码执行如下

我对 keras 工具包的理解是,如果 trainX 的 3D 张量的形状为 (41311,10,43),那么 keras 应该创建一个具有 10 个时间步长的 lstm。如果是这样,那么为什么屏幕截图中的示例会一一运行;如果时间步长为 10,那么它应该以 10 个批次运行并获得 10 个预测,然后运行接下来的 10 个样本批次。

任何人都可以回答我:为什么截图显示样本在时间步长为 10 时一个一个运行?

【问题讨论】:

    标签: tensorflow deep-learning keras


    【解决方案1】:

    通过示例,他们了解形状为 (10,43) 的 numpy 数组。第一个维度是您的样本数量。

    所以网络正在做的是: 1) 将输入分成形状的批次(batch, 10, 43)

    2) 一次给 lstm 一个样本。一个样本是 10 个事件/张量的序列,每个事件/张量的长度为 43。所以每个序列是 1 个样本。

    清楚吗?

    【讨论】:

    • 所以网络会等待输入 10 个事件/张量,然后再生成第一个预测(依此类推,最多 10 个预测)?
    • 不,你构建它的方式是:1 个输入 = 1 个长度为 43 的 10 个张量的序列。另一种说法是:1 个输入 = 1 个 2D 形状的张量 (10,43)。你有 33048 个,因为它是 41311 个的 80%。
    • 好的,我很清楚,非常感谢。我有一个不同的问题是:lstm 将在第一个形状为 (10,43) 的二维张量被输入到它之后开始给出预测(或)它将等待形状为 (10,43) 的第 10 个二维张量在给出第一个预测之前喂饱?
    • 没有。 LSTM 的输入是向量序列,因此它们的输入是二维数组。第一个维度是序列中向量的数量,第二个维度是这些向量的长度。所以它会吃掉你 (10,43) 输入的第一个向量,这意味着一个大小为 43 的向量,然后它会吃第二个,然后是第三个,直到第 10 个向量。一旦处理了整个(10,43)输入,它就会输出一些东西......在你的情况下,你要求一个长度为 10 的向量作为 LSTM 的输出。
    • 如果我的回答让你满意,别忘了点赞并接受答案:-) 谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多