【发布时间】:2018-04-17 11:54:59
【问题描述】:
我正在尝试在 Keras 中使用一维 CNN 进行二元分类。我有一台连续执行动作的机器,我的目标是分类该动作是正常的还是异常的。
为了监控每个动作的行为,有 4 个传感器收集 100 个测量值。因此,对于每个动作,我有 4x100 = 400 个数据点。在一个单独的文件中,我有每个动作对应的标签。我的数据集如下所示:
measurement ID | action ID | sensor 1 | sensor 2 | sensor 3 | sensor 4 |
-----------------------------------------------------------------
1 | 1 | 42.3 | 42.3 | 42.3 | 42.3 |
2 | 1 | 42.3 | 42.3 | 42.3 | 42.3 |
3 | 1 | 42.3 | 42.3 | 42.3 | 42.3 |
... | .... | .... | .... | .... | .... |
100 | 1 | 42.3 | 42.3 | 42.3 | 42.3 |
1 | 2 | 42.3 | 42.3 | 42.3 | 42.3 |
2 | 2 | 42.3 | 42.3 | 42.3 | 42.3 |
3 | 2 | 42.3 | 42.3 | 42.3 | 42.3 |
... | .... | .... | .... | .... | .... |
100 | 2 | 42.3 | 42.3 | 42.3 | 42.3 |
... | .... | .... | .... | .... | .... |
我的问题是如何重塑此数据集以在 Keras 中应用 convd1。还有如何为一堆向量分配标签。请注意,我的数据集由 10,000 个操作组成。我的假设是我有 4 个通道(维度)和一个包含 100 个值的向量,所以我的输入形状应该是(maxlen=100,维度=4)。也许我完全错了。
模型应如下所示:
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=5 activation='relu',input_shape=(100,4)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
sgd = SGD(lr=0.1, momentum=0.9, decay=0, nesterov=False)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(trainX, trainY, validation_data=(testX, testY), epochs=100, batch_size=100)
谁能指出实现这一目标的正确方法?
【问题讨论】:
标签: python tensorflow keras conv-neural-network