python - CNN 学习不合适,如何知道我的数据集是否足够?
问题描述
我正在尝试实现本文中提出的 CNN “A Novel Machine Learning Aided Antenna Selection Scheme for MIMO Internet of Things”,该方案可在本文中找到。
在我的实现中,我遵循其中的所有说明,但是,我的二元交叉熵损失函数并没有减少,即它在所有时期都是恒定的。我一直在尝试:改变学习率,标准化数据集(最小最大值,标准比例),改变 epochs/batch_size 的数量,改变优化器但是没有任何效果。
有人有什么建议吗?
matcont = hdf5storage.loadmat('train.mat')
# matcont = sio.loadmat('train')
Input = (matcont['in'])
Output = (matcont['out'])
model = Sequential()
model.add(Conv2D(16, (2, 2), padding="same",input_shape=(1,1,8)))
model.add(Activation("relu"))
# model.add(Dropout(0.2))
model.add(Conv2D(16, (2, 2), padding="same"))
model.add(Activation("relu"))
# model.add(Dropout(0.2))
# model.add(Conv2D(16, (2, 2), padding="same"))
# model.add(Activation("relu"))
# model.add(Dropout(0.2))
# model.add(Conv2D(16, (2, 2), padding="same"))
# model.add(Activation("relu"))
# model.add(Dropout(0.2))
# model.add(Conv2D(16, (2, 2), padding="same"))
# model.add(Activation("relu"))
# model.add(Dropout(0.2))
# model.add(Conv2D(16, (2, 2), padding="same"))
# model.add(Activation("relu"))
# model.add(Dropout(0.2))
# model.add(Conv2D(16, (2, 2), padding="same"))
# model.add(Activation("relu"))
model.add(Flatten())
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(8,activation='sigmoid'))
model.summary()
adam = optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)
model.compile(adam,loss='binary_crossentropy',metrics = ['accuracy'])
model.fit(Input,Output,epochs=100,validation_split=0.11,batch_size=100)
解决方案
您首先要验证您的模型是否能够征服数据。做到这一点的方法是通过放弃正则化并增加模型大小直到它过度拟合数据来专注于最小化训练损失。该模型应该能够在训练数据上获得几乎“完美的分数”。
推荐阅读
- php - 如何使用 CActiveDataProvider 对加密的数据库字段进行排序
- ios - 无法在 SwiftUI 按钮视图中从 Cloud Firestore 获取数据
- python - 我不能让 image_url 加载到本地主机上请帮助
- jquery - 如何在html中使用foreach
- python - 到达字典中的元素类型列表并对其进行操作
- c# - Azure Cosmos DB:按 GUID 检索文档
- reactjs - chart.js 中多个数据集的多个标签
- android - 雄辩的多重嵌套让在kotlin
- scala - 在 intelliJ 中为 scala 使用 apache spark 时出错
- vb.net - 通过进程间通信将停止参数从.NET应用程序传递给服务的最佳技术是什么?