数据集: https://pan.baidu.com/s/1mHQBPlRRv7phhxy25DUA9w 提取码: 419y
    使用 CNN 卷积神经网络,直接放代码了

    1. from keras.datasets import cifar10
    2. from keras.utils import np_utils
    3. from keras.models import Sequential
    4. from keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten
    5. from PIL import Image
    6. import numpy as np#导入各种库
    7. (train_image, train_label), (test_image, test_label) = cifar10.load_data()#导入数据集
    8. print('train = ', len(train_image))#看一下训练数据集有多少
    9. print('test = ', len(test_image))
    10. train_image_normalize = train_image.reshape(50000, 32, 32, 3).astype(float) / 255#数据标准化
    11. test_image_normalize = test_image.reshape(10000, 32, 32, 3).astype(float) / 255
    12. train_label_onehotencoding = np_utils.to_categorical(train_label)#标签一位有效编码
    13. test_label_onehotencoding = np_utils.to_categorical(test_label)
    14. model = Sequential()#创建模型
    15. model.add(Conv2D(filters=32,kernel_size=(3,3), padding='same', input_shape=(32,32,3), activation='relu'))#卷积层
    16. model.add(MaxPooling2D(pool_size=(2,2)))#池化层
    17. model.add(Conv2D(filters=64,kernel_size=(3,3), padding='same', activation='relu'))#卷积层
    18. model.add(MaxPooling2D(pool_size=(2,2)))#池化层
    19. model.add(Dropout(0.25))#防止过度拟合
    20. model.add(Flatten())#平坦层
    21. model.add(Dense(1024, kernel_initializer='normal', activation='relu'))#添加隐藏层
    22. model.add(Dropout(0.5))#防止过度拟合
    23. model.add(Dense(units=10, kernel_initializer='normal', activation='softmax'))#建立隐藏层与输出层之间的关系
    24. print(model.summary())#看一下模型的概况
    25. model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])#配置训练模型
    26. train_history = model.fit(train_image_normalize, train_label_onehotencoding, validation_split=0.2, epochs=10, batch_size=200, verbose=2)#开始训练
    27. scores = model.evaluate(test_image_normalize, test_label_onehotencoding)#用测试数据来验证准确率
    28. print(scores)
    29. #验证部分
    30. img = Image.open('17_horse.png')
    31. image_data = img.getdata()
    32. image_data_array = np.array(image_data)
    33. image_test = image_data_array.reshape(1, 32, 32, 3).astype(float) / 255
    34. prediction = model.predict(image_test)
    35. np.argmax(prediction)