基于卷积神经网络的玫瑰花和向日葵二分类识别 Python 代码实现
import\u0020numpy\u0020as\u0020np\nimport\u0020tensorflow\u0020as\u0020tf\nfrom\u0020keras.preprocessing.image\u0020import\u0020ImageDataGenerator\nimport\u0020os\nfrom\u0020PIL\u0020import\u0020Image\nfrom\u0020keras.utils\u0020import\u0020to_categorical\nfrom\u0020sklearn.model_selection\u0020import\u0020train_test_split\nfrom\u0020keras.models\u0020import\u0020Sequential\nfrom\u0020keras.layers\u0020import\u0020Conv2D,\u0020MaxPooling2D,\u0020Flatten,\u0020Dense\n\nimg_x\u0020=\u002064\nimg_y\u0020=\u002064\n\n#\u0020对读取图片进行预处理\n#\u0020读取图片\ndef\u0020read_image(imageName):\n\u0020img\u0020=\u0020Image.open(imageName)\n\u0020#\u0020读取为64*64\n\u0020img\u0020=\u0020img.resize((img_x,\u0020img_y),\u0020Image.ANTIALIAS)\n\u0020number_data\u0020=\u0020img.getdata()\n\u0020#\u0020归一化处理\n\u0020number_data_array\u0020=\u0020np.array(number_data)\n\u0020number_data_array\u0020=\u0020number_data_array.astype(float)\n\u0020number_data_normalize\u0020=\u0020number_data_array\u0020/\u0020255\n\n\u0020return\u0020number_data_normalize\n\nimages\u0020=\u0020[]\nlabels\u0020=\u0020[]\n#\u0020文件路径\npath\u0020=\u0020os.listdir("./mgh")\n\n#\u0020读取路径下各文件夹对应的图片\n#\u0020遍历文件路径下包含的所有文件夹\nfor\u0020textPath\u0020in\u0020path:\n\u0020print(textPath)\n\u0020#\u0020将文件路径下各文件夹名与文件路径结合变为图片的路径\n\u0020for\u0020fn\u0020in\u0020os.listdir(os.path.join('mgh',\u0020textPath)):\n\u0020#\u0020读取所有路径下的图片\n\u0020if\u0020fn.endswith('.jpg'):\n\u0020fd\u0020=\u0020os.path.join('./mgh',\u0020textPath,\u0020fn)\n\u0020images.append(read_image(fd))\n\u0020labels.append(textPath)\nX\u0020=\u0020np.array(images)\ny\u0020=\u0020np.array(labels)\n\n#\u0020将标签转换为整数形式0\nlabel_mapping\u0020=\u0020{label:\u0020i\u0020for\u0020i,\u0020label\u0020in\u0020enumerate(np.unique(y))}\ny\u0020=\u0020np.array([label_mapping[label]\u0020for\u0020label\u0020in\u0020y])\n\n#\u0020划分训练集与测试集\nx_train, x_test, y_train, y_test\u0020=\u0020train_test_split(X, y, test_size=0.2, random_state=30)\n\n#\u0020转换为one-hot编码\ny_train\u0020=\u0020to_categorical(y_train)\ny_test\u0020=\u0020to_categorical(y_test)\n\n#\u0020构建卷积神经网络模型\nmodel\u0020=\u0020Sequential()\nmodel.add(Conv2D(32,\u0020(3,\u00203),\u0020activation='relu',\u0020input_shape=(img_x,\u0020img_y,\u00203)))\nmodel.add(MaxPooling2D(pool_size=(2,\u00202)))\nmodel.add(Conv2D(64,\u0020(3,\u00203),\u0020activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,\u00202)))\nmodel.add(Flatten())\nmodel.add(Dense(64,\u0020activation='relu'))\nmodel.add(Dense(2,\u0020activation='softmax'))\n\n#\u0020编译模型\nmodel.compile(optimizer='adam',\u0020loss='categorical_crossentropy',\u0020metrics=['accuracy'])\n\n#\u0020数据增强\ndatagen\u0020=\u0020ImageDataGenerator(\n\u0020rotation_range=20,\n\u0020width_shift_range=0.2,\n\u0020height_shift_range=0.2,\n\u0020horizontal_flip=True\n)\ndatagen.fit(x_train)\n\n#\u0020训练模型\nmodel.fit_generator(datagen.flow(x_train, y_train, batch_size=32),\n\u0020steps_per_epoch=len(x_train)\u0020/\u002032, epochs=10)\n\n#\u0020评估模型\nscore\u0020=\u0020model.evaluate(x_test, y_test)\nprint("Model\u0020evaluation\u0020score:",\u0020score[1])
原文地址: https://www.cveoy.top/t/topic/pMXe 著作权归作者所有。请勿转载和采集!