首页 > 解决方案 > 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)

循环遍历

标签: pythonmachine-learningconv-neural-network

解决方案


您首先要验证您的模型是否能够征服数据。做到这一点的方法是通过放弃正则化并增加模型大小直到它过度拟合数据来专注于最小化训练损失。该模型应该能够在训练数据上获得几乎“完美的分数”。


推荐阅读