我想对图像上的图案进行分类。我原来的图像形状是200000*200000,我把它改成96*96,图案仍然可以用人眼辨认。像素值为0或1。你知道吗
我在用下面的神经网络。你知道吗
train_X, test_X, train_Y, test_Y = train_test_split(cnn_mat, img_bin["Classification"], test_size = 0.2, random_state = 0)
class_weights = class_weight.compute_class_weight('balanced',
np.unique(train_Y),
train_Y)
train_Y_one_hot = to_categorical(train_Y)
test_Y_one_hot = to_categorical(test_Y)
train_X,valid_X,train_label,valid_label = train_test_split(train_X, train_Y_one_hot, test_size=0.2, random_state=13)
model = Sequential()
model.add(Conv2D(24,kernel_size=3,padding='same',activation='relu',
input_shape=(96,96,1)))
model.add(MaxPool2D())
model.add(Conv2D(48,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D())
model.add(Conv2D(64,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D())
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(16, activation='softmax'))
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
train = model.fit(train_X, train_label, batch_size=80,epochs=20,verbose=1,validation_data=(valid_X, valid_label),class_weight=class_weights)
我已经运行了一些实验,以找到一个“好”数的隐藏层和完全连接层。这可能不是最理想的体系结构,因为我的电脑速度慢,我只运行了一次不同的模型,选择了矩阵混乱的最佳模型,我没有使用交叉验证,我没有尝试更复杂的体系结构,因为我的数据量小,我读过小型体系结构是最好的,是否值得尝试更复杂的体系结构?
这里的结果与5和12纪元,巴赫大小80。这是我的测试集的混淆矩阵
如你所见,看起来我穿得太多了。当我只运行5个epoch时,大多数类都被分配给类0;epoch越多,类0就越不重要,但分类仍然不好
我在每个卷积层后添加了0.8个dropout
例如
model.add(Conv2D(48,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D())
model.add(Dropout(0.8))
model.add(Conv2D(64,kernel_size=3,padding='same',activation='relu'))
model.add(MaxPool2D())
model.add(Dropout(0.8))
退学后,我95%的图片都归0类。你知道吗
我尝试了图像增强;我对所有的训练图像进行了旋转,仍然使用了加权激活函数,结果没有改善。我是否应该尝试仅用少量图像扩充类?我读到的大部分内容都是为了扩充所有的数据集…
我的问题是: 我应该试试更复杂的模型吗?你知道吗
只在没有呈现的类上进行图像增强有用吗?那我还应该使用重量等级吗(我想没有)?你知道吗
当我们看到我的数据集的大小时,我是否有希望在cnn找到一个“好”的模型?你知道吗
我认为根据不平衡的数据,最好为您的模型创建一个定制的数据生成器,以便每个生成的数据批至少包含来自每个类的一个样本。而且最好在每个
dense
层之后使用Dropout
层而不是conv
层。对于数据扩充,最好至少使用旋转、水平翻转和垂直翻转的组合。还有一些其他的数据扩充方法,比如使用GAN
网络或随机像素替换。 对于Gan
,您可以检查This SO post要使用
Gan
作为数据增强器,可以读取This Article。 用于像素级增强和GAN
pixel level data augmentation的组合我在另一个环境中使用的是用ADASYN对我的数据进行上采样。此算法计算平衡类所需的新数据量,然后提取可用数据来采样新示例。你知道吗
有一个Python的实现。否则,你也只有很少的数据。支持向量机即使在数据很少的情况下也表现良好。您可能希望尝试它们或其他图像分类算法,这取决于预期模式始终位于同一位置或不同的位置。然后你也可以尝试Viola-Jones对象检测框架。你知道吗
相关问题 更多 >
编程相关推荐