请求对我的 CNN 学习模型提出改进建议?
Request for improvement suggestion on my CNN learning model?
我正在尝试为生产线建立分类模型。如果我没理解错的话,可以用CNN对数值数据进行分类。(而且不仅是图片)
我的数据是每行 21 列的数组:
20 种不同的测量值,最后一列是类型。它可以是 0 或 1 或 2
数组的每一行都使用时间戳作为索引
类型 0 代表 80% 的产量,不需要额外处理
但是类型 1 和类型 2 在生产后需要额外处理(所以我需要清楚地识别它们)
为了重新创建 CNN 可以使用的东西,我创建了一个数据集,其中每个标签都有一个用于学习数据的数组,该数组由自其位置以来的最后 20 行组成。
因此每个标签都有对应的学习数据,一个 20x20 测量值的方形阵列(如图片)。
(数据已经使用 keras ColumnTransformer
标准化
阅读不平衡数据集后,我决定每次发现类型 1 或类型 2 时只包含类型 0。最后我的数据集大小是 18 000 行,数据形状'(18206, 20, 20)'
我的学习模型非常基础,看起来像这样:
train, test, train_label, test_label = train_test_split(X,y,test_size=0.3,shuffle=True)
##Call CNN model
sizePic = 20
model = Sequential()
model.add(Dense(sizePic*3, input_shape=(sizePic,sizePic,), activation='relu'))
model.add(Dense(sizePic, activation='relu'))
model.add(Flatten())
model.add(Dense(3, activation='softmax'))
# Compile model
sgd = optimizers.SGD(lr=0.03)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
self.logger.info(model.summary())
# Fit the model
model.fit(train, train_label, epochs=750, batch_size=200,verbose=1)
# evaluate the model
self.learning_scores = model.evaluate(test, test_label, verbose=2)
self.logger.info("scores %r"%self.learning_scores)
最后的预测分数是:
分数 [0.6088506683505354, 0.7341632843017578]
我一直在更改 batch_size 和学习率等参数,但没有大的改进。据我了解,以这种方式开始比向模型添加层要好,对吗?
有什么建议吗??
谢谢你的时间
你没有使用任何转换层,只使用全连接层(不要害怕添加一些转换层,因为它们的参数比密集层少得多)
我正在尝试为生产线建立分类模型。如果我没理解错的话,可以用CNN对数值数据进行分类。(而且不仅是图片)
我的数据是每行 21 列的数组: 20 种不同的测量值,最后一列是类型。它可以是 0 或 1 或 2 数组的每一行都使用时间戳作为索引
类型 0 代表 80% 的产量,不需要额外处理 但是类型 1 和类型 2 在生产后需要额外处理(所以我需要清楚地识别它们)
为了重新创建 CNN 可以使用的东西,我创建了一个数据集,其中每个标签都有一个用于学习数据的数组,该数组由自其位置以来的最后 20 行组成。
因此每个标签都有对应的学习数据,一个 20x20 测量值的方形阵列(如图片)。
(数据已经使用 keras ColumnTransformer
阅读不平衡数据集后,我决定每次发现类型 1 或类型 2 时只包含类型 0。最后我的数据集大小是 18 000 行,数据形状'(18206, 20, 20)'
我的学习模型非常基础,看起来像这样:
train, test, train_label, test_label = train_test_split(X,y,test_size=0.3,shuffle=True)
##Call CNN model
sizePic = 20
model = Sequential()
model.add(Dense(sizePic*3, input_shape=(sizePic,sizePic,), activation='relu'))
model.add(Dense(sizePic, activation='relu'))
model.add(Flatten())
model.add(Dense(3, activation='softmax'))
# Compile model
sgd = optimizers.SGD(lr=0.03)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
self.logger.info(model.summary())
# Fit the model
model.fit(train, train_label, epochs=750, batch_size=200,verbose=1)
# evaluate the model
self.learning_scores = model.evaluate(test, test_label, verbose=2)
self.logger.info("scores %r"%self.learning_scores)
最后的预测分数是:
分数 [0.6088506683505354, 0.7341632843017578]
我一直在更改 batch_size 和学习率等参数,但没有大的改进。据我了解,以这种方式开始比向模型添加层要好,对吗? 有什么建议吗?? 谢谢你的时间
你没有使用任何转换层,只使用全连接层(不要害怕添加一些转换层,因为它们的参数比密集层少得多)