AI人工智能 图像分类器:深度学习的应用
卷积神经网络(CNN)解决图像分类问题,即确定输入图像属于哪个类别。您可以使用 Keras 深度学习库。请注意,我们使用的是来自以下链接的猫和狗图像的训练和测试数据集:https://www.kaggle.com/c/dogs-vs-cats/data。
导入重要的 Keras 库和包,如下所示:
以下名为 sequential 的包将初始化神经网络为序列网络。
from keras.models import Sequential
以下名为Conv2D的包用于执行卷积操作,这是 CNN 的第一步。
from keras.layers import Conv2D
以下名为MaxPooling2D的包用于执行池化操作,这是 CNN 的第二步。
from keras.layers import MaxPooling2D
以下名为Flatten的包是将所有结果二维数组转换为单个长连续线性向量的过程。
from keras.layers import Flatten
以下名为Dense的包用于执行神经网络的全连接,这是 CNN 的第四步。
from keras.layers import Dense
现在,创建 sequential 类的对象。
classifier = Sequential()
现在,下一步是编写卷积部分的代码。
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
这里relu是整流函数。
现在,CNN 的下一步是对卷积部分后的结果特征图执行池化操作。
classifier.add(MaxPooling2D(pool_size = (2, 2)))
现在,通过展平将所有池化图像转换为连续向量:
classifier.add(Flatten())
接下来,创建一个全连接层。
classifier.add(Dense(units = 128, activation = 'relu'))
这里,128 是隐藏单元的数量。通常将隐藏单元的数量定义为 2 的幂。
现在,初始化输出层如下:
classifier.add(Dense(units = 1, activation = 'sigmoid'))
现在,编译我们构建的 CNN:
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
这里 optimizer 参数用于选择随机梯度下降算法,loss 参数用于选择损失函数,metrics 参数用于选择性能指标。
现在,执行图像增强,然后将图像拟合到神经网络:
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('/Users/admin/training_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary')
test_set = test_datagen.flow_from_directory('test_set', target_size = (64, 64), batch_size = 32, class_mode = 'binary')
现在,将数据拟合到我们创建的模型:
classifier.fit_generator(training_set, steps_per_epoch = 8000, epochs = 25, validation_data = test_set, validation_steps = 2000)
这里 steps_per_epoch 是训练图像的数量。
现在,模型已经训练完成,我们可以将其用于预测,如下所示:
import numpy as np
from keras.preprocessing import image
test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', target_size = (64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
prediction = 'dog'
else:
prediction = 'cat'
免费 AI IDE


更多建议: