我想构建一个图像分类器,我从Web上收集图像,并使用PIL libray调整了它们的大小 现在我希望将这些图像转换为输入。我需要对这些图像执行哪些操作 图像。我也将图像秘密转换为numpy数组,并将其存储在名为features和下一步操作的列表中
答案 0 :(得分:0)
要做出许多决定。一种是将图像划分为训练集,验证集和通常还有测试集。我通常将10%的图像用作验证集,将10%的图像用作测试集。接下来,您需要确定如何将图像提供给网络。我的首选是使用目录中的Keras ImageDataGenerator.flow。这需要您创建3个目录来存储图像。我将测试图像放在名为“ test”的目录中,将验证图像放在名为“ valid”的目录中,并将训练图像放在称为“ train”的目录中。现在,在每个目录中,您需要创建名称相同的类目录。例如,如果您尝试对狗和猫的图像进行分类。您将在测试目录,训练目录和有效目录中创建“狗”子目录和“猫”子目录。确保使用相同的名称,因为子目录的名称决定了类的名称。现在用您的图像填充类目录。这些可以是标准格式的图像,例如jpg。现在创建3个生成器,分别是火车生成器,验证生成器和测试生成器,如
train_gen=ImageDataGenerator(preprocessing_function=pre_process).flow_from_directory('train', target_size=(height, width), batch_size=train_batch_size, seed=rand_seed, class_mode='categorical', color_mode='rgb')
对验证生成器和测试生成器执行相同的操作。 ImageDataGenerator和flow_from_directory的文档为here.。现在,您已经存储了图像,并且设置了数据生成器,以根据批次大小向模型中批量提供数据。因此,现在我们可以开始实际构建模型了。您可以构建自己的模型,但是可以使用出色的图像处理模型。这称为转移学习。我喜欢使用一个称为MobileNet的模型。我之所以喜欢它,是因为它与其他具有十亿分之十的模型相比,具有少量可训练的参数(大约400万个)。 Keras具有此模型以及许多其他图像处理模型。文档为here.。现在,您必须修改模型的最后一层,以使其适合您的应用程序。 MobileNet在具有1000个类别的ImageNet数据集上进行了培训。您需要删除最后一层,并使其成为具有与类一样多的节点的密集层,并使用softmax激活功能。下面显示了两个类的示例。
mobile = tf.keras.applications.mobilenet.MobileNet( include_top=Top,
input_shape=(height,width,3),
pooling='avg', weights='imagenet',
alpha=1, depth_multiplier=1)
x=mobile.layers[-2].output
predictions=Dense (2, activation='softmax')(x)
model = Model(inputs=mobile.input, outputs=predictions)
for layer in model.layers:
layer.trainable=True
model.compile(Adam(lr=.001, loss='categorical_crossentropy', metrics=['accuracy'])
最后一行代码使用Adam优化器以0.001的学习速率编译您的模型。现在我们终于可以训练模型了。我使用modelfit生成器,如下所示:
data = model.fit_generator(generator = train_gen,validation_data=val_gen, epochs=epochs, initial_epoch=start_epoch,
callbacks = callbacks, verbose=1)
以上文档为here.,该模型将在您的训练集中进行训练,并在验证集中进行验证。对于每个时期(训练周期),您都将打印出训练损失,训练准确性,验证损失和验证准确性,从而可以监控模型的性能。最后一步是运行测试集,以查看模型在未经训练的数据上的性能如何。为此,请使用以下代码:
resultspmodel.evaluate(test_gen, verbose=0)
print('Model accuracy on Test Set is {0:7.2f} %'.format(results[1]* 100)
就是这样,但是当然有很多细节需要填写。如果您是卷积神经网络和机器学习的新手,我会在here.上推荐YouTube上的出色教程,大约有20篇顺序教程在播放列表中。我将本教程用作初学者,发现它很棒。它将涵盖您需要熟练使用CNN分类器的所有主题。祝你好运!