1
0
Files
AI-learning/lab/9_CNN-MNIST.ipynb
2025-03-16 20:29:33 +08:00

603 lines
160 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CNN实现MNIST手写数字识别\n",
"\n",
"## 模型结构\n",
"- 32个卷积核大小为3x3\n",
"- 池化核大小为2x2\n",
"- 64个卷积核大小为3x3\n",
"- 池化核大小为2x2\n",
"- 展平\n",
"- 全连接层64个神经元\n",
"- 全连接层10个神经元"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\Users\\17214\\miniconda3\\envs\\ail-tf\\lib\\site-packages\\keras\\src\\layers\\convolutional\\base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
" super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"
]
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ conv2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1600</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">102,464</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">650</span> │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
"</pre>\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ conv2d (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m320\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1600\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m102,464\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m650\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">121,930</span> (476.29 KB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m121,930\u001b[0m (476.29 KB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">121,930</span> (476.29 KB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m121,930\u001b[0m (476.29 KB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 15ms/step - accuracy: 0.8320 - loss: 0.5733 - val_accuracy: 0.9737 - val_loss: 0.0860\n",
"Epoch 2/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9763 - loss: 0.0743 - val_accuracy: 0.9840 - val_loss: 0.0529\n",
"Epoch 3/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9853 - loss: 0.0478 - val_accuracy: 0.9849 - val_loss: 0.0505\n",
"Epoch 4/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9886 - loss: 0.0364 - val_accuracy: 0.9877 - val_loss: 0.0430\n",
"Epoch 5/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9907 - loss: 0.0282 - val_accuracy: 0.9888 - val_loss: 0.0394\n",
"Epoch 6/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9933 - loss: 0.0229 - val_accuracy: 0.9872 - val_loss: 0.0441\n",
"Epoch 7/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9940 - loss: 0.0187 - val_accuracy: 0.9872 - val_loss: 0.0424\n",
"Epoch 8/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9955 - loss: 0.0148 - val_accuracy: 0.9887 - val_loss: 0.0426\n",
"Epoch 9/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9954 - loss: 0.0145 - val_accuracy: 0.9862 - val_loss: 0.0500\n",
"Epoch 10/10\n",
"\u001b[1m375/375\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 14ms/step - accuracy: 0.9970 - loss: 0.0099 - val_accuracy: 0.9872 - val_loss: 0.0522\n",
"\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9868 - loss: 0.0476\n",
"accuracy: 0.9899"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"模型已保存到./models/mnist_model_cnn_tf.h5\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import tensorflow as tf\n",
"import tensorflow.keras as keras\n",
"from keras import datasets,layers\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 加载mnist数据集\n",
"(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()\n",
"\n",
"x_train = x_train.reshape(-1,28,28,1)/255.0\n",
"x_test = x_test.reshape(-1,28,28,1)/255.0\n",
"\n",
"y_train = keras.utils.to_categorical(y_train,10)\n",
"y_test = keras.utils.to_categorical(y_test,10)\n",
"\n",
"model = keras.Sequential([\n",
" layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)), #28-3+1/1 + 1 = 26,32\n",
" layers.MaxPooling2D((2,2)), # 26/2=13,32\n",
" layers.Conv2D(64,(3,3),activation='relu'), # 13-3+1/1 + 1 = 11,64\n",
" layers.MaxPooling2D((2,2)), # 11/2 = 6,64\n",
" layers.Flatten(), # 6*6*64 = 2304\n",
" layers.Dense(64,activation='relu'),\n",
" layers.Dense(10,activation='softmax')\n",
"])\n",
"\n",
"model.summary()\n",
"\n",
"model.compile(optimizer='adam',\n",
" loss='categorical_crossentropy',\n",
" metrics=['accuracy'])\n",
"\n",
"history = model.fit(x_train,y_train,\n",
" batch_size=128,\n",
" epochs=10,\n",
" validation_split=0.2)\n",
"\n",
"test_loss,test_acc = model.evaluate(x_test,y_test)\n",
"print(f'accuracy: {test_acc:.4f}')\n",
"\n",
"model.save('./models/mnist_model_cnn_tf.h5') # 保存为HDF5格式\n",
"print(\"模型已保存到./models/mnist_model_cnn_tf.h5\")\n",
"\n",
"plt.subplot(1, 2, 1)\n",
"plt.plot(history.history['accuracy'], label='train accuracy')\n",
"plt.plot(history.history['val_accuracy'], label='verify accuracy')\n",
"plt.title('accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.legend()\n",
"\n",
"plt.subplot(1, 2, 2)\n",
"plt.plot(history.history['loss'], label='train loss')\n",
"plt.plot(history.history['val_loss'], label='val loss')\n",
"plt.title('loss')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:absl:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.\n"
]
},
{
"data": {
"image/png": "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0tLS5IYbbjCX6oqNjZWhQ4fK9u3bfeYpKiqSlJQUadCggdStW1dGjBghBw4ckFDbDr17975gfxg3bpwEkioRQO+++65MnjzZjG3//PPPpUuXLjJgwAA5ePCghJqrrrpK9u/f750++ugjCXaFhYXmb64/Qkoze/Zsefnll2XevHmyadMmqVOnjtk/9EAUSttBaeAU3z8WLVokwWTdunUmXDZu3CgrV66U06dPS//+/c228Zg0aZIsX75c0tPTzfx6bcnhw4dLqG0HlZyc7LM/6L+VgOJUAd26dXNSUlK8z8+ePeskJCQ4aWlpTiiZMWOG06VLFyeU6S67ZMkS7/Nz5845cXFxzrPPPut9LS8vz4mIiHAWLVrkhMp2UElJSc5dd93lhJKDBw+abbFu3Trv375mzZpOenq6d55vvvnGzLNhwwYnVLaDuuWWW5yHH37YCWQBXwM6deqUbN682TSrFL9gqT7fsGGDhBptWtImmNatW8t9990nu3fvllCWk5Mjubm5PvuHXgRRm2lDcf9Yu3ataZK58sorZfz48XL48GEJZvn5+eYxJibGPOqxQmsDxfcHbaZu3rx5UO8P+SW2g8fChQulYcOG0qlTJ0lNTZXjx49LIAm4q2GXdOjQITl79qw0btzY53V9/u2330oo0YPqggULzMFFq9OzZs2Snj17yrZt20xbcCjS8FGl7R+e90KFNr9pU1OrVq1k586d8vjjj8ugQYPMgbd69eoSbPTWLRMnTpQePXqYA6zSv3l4eLhER0eHzP5wrpTtoO69915p0aKF+cG6detW+fWvf236id5//30JFAEfQPgvPZh4dO7c2QSS7mDvvfeejBkzxuq6wb6RI0d6///qq682+0ibNm1Mrahv374SbLQPRH98hUI/qD/bYezYsT77gw7S0f1Af5zofhEIAr4JTquP+uut5CgWfR4XFyehTH/ltW/fXrKzsyVUefYB9o8LaTOt/vsJxv1jwoQJsmLFClmzZo3P/cP0b67N9nl5eSGxP0woYzuURn+wqkDaHwI+gLQ63bVrV8nMzPSpcurzxMRECWXHjh0zv2b0l02o0uYmPbAU3z/0jpA6Gi7U94+9e/eaPqBg2j90/IUedJcsWSKrV682f//i9FhRs2ZNn/1Bm520rzSY9gfnEtuhNFu2bDGPAbU/OFXA4sWLzaimBQsWOF9//bUzduxYJzo62snNzXVCySOPPOKsXbvWycnJcT7++GOnX79+TsOGDc0ImGB29OhR54svvjCT7rLPP/+8+f9du3aZ93/3u9+Z/WHZsmXO1q1bzUiwVq1aOSdOnHBCZTvoe48++qgZ6aX7x6pVq5zrrrvOadeunVNUVOQEi/HjxztRUVHm38H+/fu90/Hjx73zjBs3zmnevLmzevVqJysry0lMTDRTMBl/ie2QnZ3tPPHEE+b76/6g/zZat27t9OrVywkkVSKA1CuvvGJ2qvDwcDMse+PGjU6oueeee5z4+HizDZo0aWKe644W7NasWWMOuCUnHXbsGYo9bdo0p3HjxuaHSt++fZ3t27c7obQd9MDTv39/p1GjRmYYcosWLZzk5OSg+5FW2vfXaf78+d559IfHgw8+6NSvX9+54oornGHDhpmDcyhth927d5uwiYmJMf8m2rZt60yZMsXJz893Agn3AwIAWBHwfUAAgOBEAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABiw/8D/wAmzXe/3TEAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"预处理后的数据范围: 0.12156863 0.83137256\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 97ms/step\n",
"预测概率分布: [[3.0960881e-09 1.5032079e-09 9.9999988e-01 7.3625035e-09 2.2941347e-09\n",
" 3.6706155e-12 2.5781807e-12 7.7586833e-08 4.7858329e-08 1.4447438e-10]]\n",
"预测结果2\n"
]
}
],
"source": [
"# 测试tf训练的手写数据识别\n",
"import tensorflow as tf\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 加载模型\n",
"model = tf.keras.models.load_model('./models/mnist_model_cnn_tf.h5')\n",
"\n",
"# 加载并预处理图片\n",
"image_path = './test/2.png'\n",
"image = tf.keras.preprocessing.image.load_img(image_path, target_size=(28, 28), color_mode='grayscale')\n",
"image = tf.keras.preprocessing.image.img_to_array(image)\n",
"\n",
"# 可视化预处理后的图片\n",
"plt.imshow(image, cmap='gray')\n",
"plt.title('Processed Image')\n",
"plt.show()\n",
"\n",
"# 进一步处理\n",
"image = image.reshape(-1, 28 , 28, 1) / 255.0\n",
"\n",
"# 打印预处理后的数据\n",
"print(\"预处理后的数据范围:\", np.min(image), np.max(image))\n",
"\n",
"# 进行预测\n",
"predictions = model.predict(image)\n",
"print(\"预测概率分布:\", predictions)\n",
"\n",
"# 获取预测结果\n",
"predicted_class = tf.argmax(predictions, axis=1).numpy()[0]\n",
"print(f\"预测结果:{predicted_class}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CNN实现MNIST手写数字识别 - torch"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Epoch 1/10: 100%|██████████| 938/938 [00:26<00:00, 35.81batch/s, Loss=0.1387, Accuracy=95.90]\n",
"Epoch 2/10: 100%|██████████| 938/938 [00:26<00:00, 34.93batch/s, Loss=0.0491, Accuracy=98.49]\n",
"Epoch 3/10: 100%|██████████| 938/938 [00:26<00:00, 35.87batch/s, Loss=0.0362, Accuracy=98.86]\n",
"Epoch 4/10: 100%|██████████| 938/938 [00:26<00:00, 35.98batch/s, Loss=0.0297, Accuracy=99.08]\n",
"Epoch 5/10: 100%|██████████| 938/938 [00:26<00:00, 35.63batch/s, Loss=0.0218, Accuracy=99.30]\n",
"Epoch 6/10: 100%|██████████| 938/938 [00:26<00:00, 35.56batch/s, Loss=0.0198, Accuracy=99.36]\n",
"Epoch 7/10: 100%|██████████| 938/938 [00:26<00:00, 35.84batch/s, Loss=0.0159, Accuracy=99.46]\n",
"Epoch 8/10: 100%|██████████| 938/938 [00:27<00:00, 34.09batch/s, Loss=0.0125, Accuracy=99.58]\n",
"Epoch 9/10: 100%|██████████| 938/938 [00:26<00:00, 35.21batch/s, Loss=0.0125, Accuracy=99.57]\n",
"Epoch 10/10: 100%|██████████| 938/938 [00:27<00:00, 34.48batch/s, Loss=0.0125, Accuracy=99.58]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Test Loss: 0.0438, Test Accuracy: 98.95%\n",
"模型已保存 ./models/mnist_model_cnn_torch.pth\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAACdEUlEQVR4nOzdd3hUZfrG8XsmPSGFkh5IaBJK6F0ElUgRlaYUC0XQdRWVRfmtuBYUFURAFFyxAUoRFkXsIKKICEiXUKQJhHQQUgkpM/P7I2Q0JKGEJCfl+7muucicOfPOcwZCTp553/uYbDabTQAAAAAAAEA5MhtdAAAAAAAAAKofmlIAAAAAAAAodzSlAAAAAAAAUO5oSgEAAAAAAKDc0ZQCAAAAAABAuaMpBQAAAAAAgHJHUwoAAAAAAADljqYUAAAAAAAAyh1NKQAAAAAAAJQ7mlIAKpVRo0YpLCysRM+dPHmyTCZT6RYEAABQBjjnAVAd0JQCUCpMJtMV3davX290qYYYNWqUatSoYXQZAADgGnHOc+WGDBkik8mkf//730aXAqCCMtlsNpvRRQCo/BYvXlzg/kcffaS1a9dq0aJFBbbfcsst8vf3L/Hr5OTkyGq1ysXF5aqfm5ubq9zcXLm6upb49Utq1KhR+uSTT5Senl7urw0AAEoP5zxXJjU1Vf7+/goICJDFYtGJEyeYvQWgEEejCwBQNdx7770F7m/ZskVr164ttP1i586dk7u7+xW/jpOTU4nqkyRHR0c5OvLfHgAAKDnOea7Mp59+KovFovnz5+vmm2/Whg0b1KNHD0NrKorNZtP58+fl5uZmdClAtcTyPQDl5sYbb1SLFi20Y8cOde/eXe7u7nr66aclSZ9//rn69eunoKAgubi4qGHDhpoyZYosFkuBMS7OVzh+/LhMJpNmzJihd999Vw0bNpSLi4s6dOigbdu2FXhuUfkKJpNJ48aN06pVq9SiRQu5uLioefPmWr16daH6169fr/bt28vV1VUNGzbUO++8U+qZDStWrFC7du3k5uamOnXq6N5771VsbGyBfRISEjR69GiFhITIxcVFgYGB6t+/v44fP27fZ/v27erdu7fq1KkjNzc31a9fX/fff3+p1QkAAIrHOY+0ZMkS3XLLLbrpppvUtGlTLVmypMj9fv/9dw0ZMkS+vr5yc3NTkyZN9J///KfAPrGxsRozZoz9Patfv77++c9/Kjs7u9jjlaSFCxfKZDIVOEcKCwvTbbfdpjVr1qh9+/Zyc3PTO++8I0lasGCBbr75Zvn5+cnFxUXNmjXT22+/XWTd3377rXr06CFPT095eXmpQ4cOWrp0qSTp+eefl5OTk06dOlXoeQ8++KB8fHx0/vz5y7+JQDXAlAEA5erPP/9U3759NWzYMN177732ae0LFy5UjRo1NGHCBNWoUUM//PCDnnvuOaWmpuq111677LhLly5VWlqa/vGPf8hkMmn69OkaNGiQ/vjjj8t+0rhx40atXLlSDz/8sDw9PfXmm29q8ODBio6OVu3atSVJu3btUp8+fRQYGKgXXnhBFotFL774onx9fa/9Tblg4cKFGj16tDp06KCpU6cqMTFRb7zxhn755Rft2rVLPj4+kqTBgwdr3759evTRRxUWFqakpCStXbtW0dHR9vu9evWSr6+vnnrqKfn4+Oj48eNauXJlqdUKAAAurTqf88TFxenHH3/Uhx9+KEkaPny4Xn/9dc2dO1fOzs72/fbs2aMbbrhBTk5OevDBBxUWFqajR4/qyy+/1Msvv2wfq2PHjkpOTtaDDz6o8PBwxcbG6pNPPtG5c+cKjHelDh48qOHDh+sf//iHHnjgATVp0kSS9Pbbb6t58+a644475OjoqC+//FIPP/ywrFarHnnkEfvzFy5cqPvvv1/NmzfXpEmT5OPjo127dmn16tW6++67dd999+nFF1/U8uXLNW7cOPvzsrOz9cknn2jw4MGGLq0EKhQbAJSBRx55xHbxfzE9evSwSbLNmzev0P7nzp0rtO0f//iHzd3d3Xb+/Hn7tpEjR9pCQ0Pt948dO2aTZKtdu7btzJkz9u2ff/65TZLtyy+/tG97/vnnC9Ukyebs7Gw7cuSIfdtvv/1mk2SbM2eOfdvtt99uc3d3t8XGxtq3HT582Obo6FhozKKMHDnS5uHhUezj2dnZNj8/P1uLFi1smZmZ9u1fffWVTZLtueees9lsNtvZs2dtkmyvvfZasWN99tlnNkm2bdu2XbYuAABwbTjnKWzGjBk2Nzc3W2pqqs1ms9kOHTpkk2T77LPPCuzXvXt3m6enp+3EiRMFtlutVvvXI0aMsJnN5iLPa/L3K+p4bTabbcGCBTZJtmPHjtm3hYaG2iTZVq9eXWj/ov5uevfubWvQoIH9fnJyss3T09PWqVOnAudsF9fdpUsXW6dOnQo8vnLlSpsk248//ljodYDqiuV7AMqVi4uLRo8eXWj739fxp6Wl6fTp07rhhht07tw5/f7775cdd+jQoapZs6b9/g033CBJ+uOPPy773MjISDVs2NB+v2XLlvLy8rI/12Kx6Pvvv9eAAQMUFBRk369Ro0bq27fvZce/Etu3b1dSUpIefvjhAp+c9evXT+Hh4fr6668l5b1Pzs7OWr9+vc6ePVvkWPkzqr766ivl5OSUSn0AAODqVOdzniVLlqhfv37y9PSUJDVu3Fjt2rUrsITv1KlT2rBhg+6//37Vq1evwPPzl+JZrVatWrVKt99+u9q3b1/odUoaoVC/fn317t270Pa//92kpKTo9OnT6tGjh/744w+lpKRIktauXau0tDQ99dRThWY7/b2eESNG6Ndff9XRo0ft25YsWaK6detWyGwtwCg0pQCUq+Dg4CKnWe/bt08DBw6Ut7e3vLy85Ovraw8MzT8JuJSLT2byT9aKa9xc6rn5z89/blJSkjIzM9WoUaNC+xW1rSROnDghSfbp438XHh5uf9zFxUWvvvqqvv32W/n7+6t79+6aPn26EhIS7Pv36NFDgwcP1gsvvKA6deqof//+WrBggbKyskqlVgAAcHnV9ZznwIED2rVrl66//nodOXLEfrvxxhv11VdfKTU1VdJfTbQWLVoUO9apU6eUmpp6yX1Kon79+kVu/+WXXxQZGSkPDw/5+PjI19fXngWW/3eT32S6XE1Dhw6Vi4uLvRGXkpKir776Svfccw9XIQT+hqYUgHJV1JVNkpOT1aNHD/3222968cUX9eWXX2rt2rV69dVXJeV9SnY5Dg4ORW632Wxl+lwjjB8/XocOHdLUqVPl6uqqZ599Vk2bNtWuXbsk5X1K98knn2jz5s0aN26cYmNjdf/996tdu3ZKT083uHoAAKqH6nrOs3jxYknSv/71LzVu3Nh+mzlzps6fP69PP/201F4rX3FNnovD4/MV9Xdz9OhR9ezZU6dPn9asWbP09ddfa+3atfrXv/4l6cr+bv6uZs2auu222+xNqU8++URZWVmXvUojUN0QdA7AcOvXr9eff/6plStXqnv37vbtx44dM7Cqv/j5+cnV1VVHjhwp9FhR20oiNDRUUl7w5s0331zgsYMHD9ofz9ewYUM98cQTeuKJJ3T48GG1bt1aM2fOtJ8ISlLnzp3VuXNnvfzyy1q6dKnuueceLVu2TGPHji2VmgEAwNWp6uc8NptNS5cu1U033aSHH3640ONTpkzRkiVLNHr0aDVo0ECStHfv3mLH8/X1lZeX1yX3kf6aLZacnGyPMZD+mol+Jb788ktlZWXpiy++KDCj7McffyywX/7yx71791529tiIESPUv39/bdu2TUuWLFGbNm3UvHnzK64JqA6YKQXAcPmf2v39U7rs7Gz997//NaqkAhwcHBQZGalVq1YpLi7Ovv3IkSP69ttvS+U12rdvLz8/P82bN6/AMrtvv/1WBw4cUL9+/SRJ586dK3QJ4YYNG8rT09P+vLNnzxb6xLN169aSxBI+AAAMVNXPeX755RcdP35co0eP1p133lnoNnToUP3444+Ki4uTr6+vunfvrvnz5ys6OrrAOPnvj9ls1oABA/Tll19q+/bthV4vf7/8RtGGDRvsj2VkZNiv/nelx/73MaW8JXcLFiwosF+vXr3k6empqVOnFjonu/j8q2/fvqpTp45effVV/fTTT8ySAorATCkAhuvatatq1qypkSNH6rHHHpPJZNKiRYsq1PK5yZMn67vvvtP111+vf/7zn7JYLJo7d65atGih3bt3X9EYOTk5eumllwptr1Wrlh5++GG9+uqrGj16tHr06KHhw4crMTFRb7zxhsLCwuxTxw8dOqSePXtqyJAhatasmRwdHfXZZ58pMTFRw4YNkyR9+OGH+u9//6uBAweqYcOGSktL03vvvScvLy/deuutpfaeAACAq1PVz3mWLFkiBwcH+4dpF7vjjjv0n//8R8uWLdOECRP05ptvqlu3bmrbtq0efPBB1a9fX8ePH9fXX39tf61XXnlF3333nXr06KEHH3xQTZs2VXx8vFasWKGNGzfKx8dHvXr1Ur169TRmzBhNnDhRDg4Omj9/vnx9fQs1vIrTq1cvOTs76/bbb9c//vEPpaen67333pOfn5/i4+Pt+3l5een111/X2LFj1aFDB919992qWbOmfvvtN507d65AI8zJyUnDhg3T3Llz5eDgoOHDh19RLUB1QlMKgOFq166tr776Sk888YSeeeYZ1axZU/fee6969uxZ5JVRjNCuXTt9++23evLJJ/Xss8+qbt26evHFF3XgwIErulKOlPdJ6LPPPltoe8OGDfXwww9r1KhR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avvrT4tNFmsR260Xtlv+up970f0C+xUYr+jtuVZrsbOILBf2K412mtkke9OnQDPIwSwXJwe5FNkkyt/HQS5O5gKNJJeLGkl54/x9H4dC++bv5+hQ8WPEDW1KSdK4ceOKncp88Q+fsLCwq86CqGg/wBr41pC7s4POZVv0x6l0Nfb3NLokAMA1MJlMpbYMqCL55ZdfNGrUKA0cOFBS3uyP48ePl2sNTZs2teff/L2u6667zr4k39HRUZGRkYqMjNTzzz8vHx8f/fDDDxo0aJBMJpOuv/56XX/99XruuecUGhqqzz77TBMmTCjX40DR+N4puT///FOff/65li1bpubNm9u3WywWdevWTd9995369OmjsLAwrVu3TjfddFOhMVq2bKmYmBgdOnSoyNlSvr6+SkhIkM1msy9r2b1792Vr+/333/Xnn39q2rRpqlu3riRp+/bthV77ww8/VE5OTrGzpcaOHavhw4crJCREDRs21PXXX3/Z1wZQujKzLdoTk6yd0cnaceKsdp88q9Pphds2AV6uahvqo7b1aqptaE01D/KSi6Px0TlFsVptstj+1ri60KwqrtH1V5MrryFmk/7WJCq6UVQZGkEVSdU7E6jgHMwmNQ/y0rbjZ7UnJoWmFACgQmrcuLFWrlyp22+/XSaTSc8++2yZzXg6depUoV92AwMD9cQTT6hDhw6aMmWKhg4dqs2bN2vu3Ln673//K0n66quv9Mcff6h79+6qWbOmvvnmG1mtVjVp0kS//vqr1q1bp169esnPz0+//vqrTp06paZNm5bJMZS3tLQ0Pfvss/rss8+UlJSkNm3a6I033rDnBSUmJurf//63vvvuOyUnJ6t79+6aM2eOGjduXOyYCxcutEco5HNxcdH58+fL9FiqmvL43lm0aJFq166tIUOGFMpBufXWW/XBBx+oT58+mjx5sh566CH5+fnZQ81/+eUXPfroo+rRo4e6d++uwYMHa9asWWrUqJF+//13mUwm9enTRzfeeKNOnTql6dOn684779Tq1av17bffysvr0rkj9erVk7Ozs+bMmaOHHnpIe/fu1ZQpUwrsM27cOM2ZM0fDhg3TpEmT5O3trS1btqhjx472K/j17t1bXl5eeumll/Tiiy+W6vsHoDCbzaaYs5kXZkGd1c7oZB2IT1XuRVOLnBxMah7kfaEB5WOfDVVZmM0mmWVSKU6YxTWiKWWAFsHe2nb8rKJiUzS4XYjR5QAAUMisWbN0//33q2vXrqpTp47+/e9/KzU1tUxea+nSpVq6dGmBbVOmTNEzzzyj//3vf3ruuec0ZcoUBQYG6sUXX9SoUaMkST4+Plq5cqUmT56s8+fPq3Hjxvr444/VvHlzHThwQBs2bNDs2bOVmpqq0NBQzZw5U3379i2TYyhvY8eO1d69e7Vo0SIFBQVp8eLFioyM1P79+xUUFKQBAwbIyclJn3/+uby8vDRr1iz745fK5fHy8tLBgwft90vrCnXVSXl878yfP18DBw4s8u9n8ODBuu+++3T69GmNHDlS58+f1+uvv64nn3xSderU0Z133mnf99NPP9WTTz6p4cOHKyMjQ40aNdK0adMk5c1U/O9//6tXXnlFU6ZM0eDBg/Xkk0/q3XffvWRtvr6+WrhwoZ5++mm9+eabatu2rWbMmKE77rjDvk/t2rX1ww8/aOLEierRo4ccHBzUunXrArOhzGazRo0apVdeeUUjRoy41rcMwEXO51gUFZuinSfOaseFJtTp9KxC+/l5uqhtvZpqF5rXhGoe5C1XOjooRSYb10YuJDU1Vd7e3kpJSbnsp0ElsXJnjCb87ze1D62pT/7ZtdTHBwCUjfPnz9uvbOXq6mp0OSgll/p7LetzgpLIzMyUp6enPv/8c/Xr18++vV27durbt69GjBihJk2aaO/evfalXVarVQEBAXrllVc0duzYIsdduHChxo8fr+Tk5BLXdqn3i+8fXK0xY8bo1KlT+uKLLy65H/+2gEuz2WyKTc7Uzvww8uiz2hdXeBaU44VVPW0uLMNrW89HwT5ufECBErnScyhmShmAsHMAAFBSubm5slgshX75dnNz08aNGzV06FBJKvC42WyWi4uLNm7cWGxTSsrLPwoNDZXValXbtm31yiuvFMgsAspDSkqKoqKitHTp0ss2pAAUdj7Hon1xKdp5IvnCLKizSkorPAuqTg0Xta3nc2EWVE1FBDMLCuWPppQBCDsHAAAl5enpqS5dumjKlClq2rSp/P399fHHH2vz5s1q1KiRwsPDVa9ePU2aNEnvvPOOPDw89PrrrysmJkbx8fHFjtukSRPNnz9fLVu2VEpKimbMmKGuXbtq3759CgkpOm4gKytLWVl//aJTVks8Ub30799fW7du1UMPPaRbbrnF6HKACi8uObPAFfH2xaUox1JwFpSD2aRmgV5qW8/nwiyomgqpySwoGI+mlAEIOwcAANdi0aJFuv/++xUcHCwHBwe1bdtWw4cP144dO+Tk5KSVK1dqzJgxqlWrlhwcHBQZGam+ffte8irGXbp0UZcuXez3u3btqqZNm+qdd94pFFSdb+rUqXrhhRdK/fhQvVW0q2cDFUlWrkX74lIvhJHnNaISUgtfkKK2h7Pa5GdB1fNRyxAfuTkzCwoVD00pgxB2DgAASqphw4b66aeflJGRodTUVAUGBmro0KFq0KCBpLx8qd27dyslJUXZ2dny9fVVp06d1L59+yt+DScnJ7Vp00ZHjhwpdp9JkyZpwoQJ9vupqamqW7duyQ8MAFBAQsr5v10R76z2xqYq21Lwip4OZpPCAzwLXBGvXi13ZkGhUqApZZD8XKm9sSkGVwIAACorDw8PeXh46OzZs1qzZo2mT59e4HFv77zzjcOHD2v79u3FzngqisViUVRUlG699dZi93FxcZGLi0vJigcAFJCda9X++LxZUDuiz2rXibOKSyk8C6qmu9OFBlTeMryWId7ycOFXe1RO/Ms1SMsQws4BoLKyWq2X3wmVRmW8EPGaNWtks9nUpEkTHTlyRBMnTlR4eLhGjx4tSVqxYoV8fX1Vr149RUVF6fHHH9eAAQPUq1cv+xgjRoxQcHCwpk6dKkl68cUX1blzZzVq1EjJycl67bXXdOLEiUsGo5dEZXy/UbHxfzIqo3PZuToQn6b9cSnaF5eqfXGpOpiYpuzcgv+ezSapScCFLKgLjaiw2syCQtVBU8og9ev8FXZ+9FS6riNXCgAqPGdnZ5nNZsXFxcnX11fOzs6cFFZyNptNp06dkslkkpOTk9HlXLGUlBRNmjRJMTExqlWrlgYPHqyXX37Zfgzx8fGaMGGCEhMTFRgYqBEjRujZZ58tMEZ0dLTMZrP9/tmzZ/XAAw8oISFBNWvWVLt27bRp0yY1a9asVGp2cnKSyWTSqVOn5Ovry/cOrpnNZlN2drZOnTols9ksZ2dno0sCinQmI1v741K1z96AStEfpzNUVI/ex91JbepeuCJevZpqWddHNZgFhSrMZOPjqkJSU1Pl7e2tlJQUeXl5ldnr3DVvk7YdP6uZd7UiVwoAKons7GzFx8fr3LlzRpeCUmIymRQSEqIaNWoUeqy8zgmqisu9X+np6YqJiWG2FEqVu7u7AgMDaUrBcDabTbHJmfaZT/mzoOKLWIInSb6eLmoe5KXmQV5qFuit5kFeCmUWFKqIKz2HouVqIMLOAaDycXZ2Vr169ZSbmyuLxWJ0OSgFTk5OcnDgikTloUaNGmrcuLFycnKMLgVVhIODgxwdHfklHuXOYrXpj1Pp9plP++JStT8+Vcnniv7/LbS2+4UGlLeaXWhE+Xm6lnPVQMVDU8pAhJ0DQOWUv9SrMi33AioKBwcHmoAAKpXzORYdTEgr0ID6PSFV53MK55k5mk1q5FdDzYO87bOgmgZ5ycuVcwagKDSlDETYOQAAAABUHCmZOfb8p/0XluEdOZUui7XwsmM3Jwc1DfT8WwPKW439a8jVicY7cKVoShmIsHMAAAAAKH82m02JqVkFwsf3xaUq5mxmkfvX8nDOy37KX4IX6KX6dTyYWABcI5pSBnIwm9Q8yCsvVyomhaYUAAAAAJQyq9Wm439m2API82dB/ZmRXeT+wT5u9plPzYO81DzYSwFermSXAWWAppTBCDsHAAAAgNKRnWvVocQ0+xK8fXGpOhCfqozswhcnMZukhr41CjSgmgV5ycedKzkC5YWmlMHyc6UIOwcAAACAK5eelasD8anaF5tinwV1OClNOZbC+U8ujmaFB3iq2d8CyMMDvOTmTP4TYCSaUgbLvwIfYecAAAAAkMditSkp7bziks8rPiVTccmZf/s678/T6UUvv/NydSww86l5kLca+nrI0cFczkcB4HJoShmMsHMAAAAA1YnNZlPyuRzFJmcqPiWvwRSbnKn45POKu7AtIfV8kVe8u1iAl6t95lP+LKiQmm7kPwGVBE0pgxF2DgAAAKAqOZedqzh7gynzb1/n/RmXkqnzOdbLjuNgNinAy1VBPq4K9HZToI+rgn3c8r72dlVITTfyn4BKjqZUBUDYOQAAAIDKIMdiVULK+QINpvwZTnEXtqVk5lzRWHVqOCvQ283edArycVXQhaZTkI+r/DxdiTcBqjiaUhUAYecAAAAAjGa12nQ6I0vxyflL6s4r/kLjKT/HKSktS7bLr6pTDRfHvzWb3BTk7apAnwuNJ283BXi7ytWJkHGguqMpVQEQdg4AAACgrKWez8lbRpd8/kKjKe/r/GynhJTzyrZcflmds4NZgT6uCvTOazAF+eQtrfv7116uTuVwRAAqO5pSFQBh5wAAAADKQtr5HK3aFaslv0br94S0y+5vMkl+ni4XZjflZTcF+bgVmPVU28NZZj5IB1AKaEpVAISdAwAAAChNB+JTtXjLCa3aFauMbIt9u4+7kwK93RRcTHh4gLernBzMBlYOoDqhKVVBRAT7EHYOAAAAoMTO51j07d54Ld4SrR0nztq3N/T10L2dQzWwTTBXqwNQodCUqiAiQrwkSVGEnQMAAAC4CtF/ntOSrSe0YnuMzmRkS5IczSb1bh6gezuHqnODWjKZWG4HoOKhKVVB5Ied7yfsHAAAAMBlWKw2/fh7khZtOaENh0/Zr4gX6O2quzvW09AOdeXn5WpskQBwGTSlKgjCzgEAAABcTlLaef1v20l9vPWkYpMz7du7X+erezvV083hfnIkEwpAJUFTqoIg7BwAAABAUWw2m349dkaLtpzQmr0JyrXmTYvycXfSkPZ1dXfHegqr42FwlQBw9WhKVSCEnQMAAADIl3o+Ryt3xGjJr9E6nJRu3962no/u7RyqWyMC5erkYGCFAHBtaEpVIISdAwAAANgbm6Ilv57Qql1xysyxSJLcnR3Uv3Ww7u1cT82DvA2uEABKB02pCoSwcwAAAKB6Op9j0Vd74rV4ywntPpls397Yr4bu6xKqAW2C5eXqZFyBAFAGaEpVIISdAwAAANXL8dMZWvLrCa3YEaPkczmSJCcHk/q0CNS9neqpY/1aMpn4sBpA1URTqgJxMJvUIshbW4+fIewcAAAAqKJyLVat+z1Ji7ec0M+HT9u3B/u46e5O9TSkfV35eroYWCEAlA+aUhVMi+ALTSnCzgEAAIAqJTH1vJZtPall26IVn3JekmQySTde56t7O4fqxiZ+RHgAqFZoSlUwhJ0DAAAAVYfNZtPmo39q8a8n9N2+ROVabZKkWh7OGtK+ru7pVE91a7kbXCUAGIOmVAVD2DkAAABQ+aWcy9EnO2O05NcT+uNUhn17h7CaurdzqPq0CJCLo4OBFQKA8WhKVTCEnQMAAACV156YZC3eckJf/Ban8zlWSZKHs4MGtg3WvZ1DFR7gZXCFAFBx0JSqYAg7BwAAACqXzGyLvtwTp8VbTmhPzF8xHOEBnrq3c6gGtAlWDRd+9QKAi/E/YwVE2DkAAABQ8R09la4lW6L1yY6TSj2fK0lydjDr1ogA3ds5VO1Ca8pkIo4DAIpDU6oCIuwcAAAAqJhyLFZ9vz9Ri389oV+O/GnfXreWm+7uGKoh7UNUu4aLgRUCQOVBU6oCIuwcAAAAqFjiUzL18daTWrY1WklpWZIkk0nqGe6nezqHqkdjX5k5bweAq0JTqgKqX6eGPJwdlEHYOQAAAGAYq9WmX46e1uItJ/T9gSRZrDZJUp0azhraoa6Gd6ynkJruBlcJAJUXTakKyMFsUvMLYed7CDsHAAAAylVKZo5WbD+pxVtO6Pif5+zbO9avpfs6h6p38wA5O5oNrBAAqgaaUhVUftj53tgU3UnYOQAAAFDmDiWmaeGm4/psZ6wycyySpBoujhrcNlj3dA7lw2IAKGWGt/ffeusthYWFydXVVZ06ddLWrVuL3Xffvn0aPHiwwsLCZDKZNHv27EL7TJ06VR06dJCnp6f8/Pw0YMAAHTx4sAyPoGwQdg4AAACUPYvVpjX7EnT3e1vU6/UNWvprtDJzLAoP8NQrAyP069M99UL/FjSkAKAMGDpTavny5ZowYYLmzZunTp06afbs2erdu7cOHjwoPz+/QvufO3dODRo00F133aV//etfRY75008/6ZFHHlGHDh2Um5urp59+Wr169dL+/fvl4eFR1odUagg7BwAAAMpO8rlsLd92Uou2nFDM2UxJktkk9WoWoFHXh6lT/VoymTgHB4CyZGhTatasWXrggQc0evRoSdK8efP09ddfa/78+XrqqacK7d+hQwd16NBBkop8XJJWr15d4P7ChQvl5+enHTt2qHv37qV8BGWHsHMAAACg9P2ekKoPNx3XZ7tidT7HKknycXfSsA71dG9ngssBoDwZtnwvOztbO3bsUGRk5F/FmM2KjIzU5s2bS+11UlLylr/VqlWr2H2ysrKUmppa4Ga0/LBzSdoTwxI+AADwl7S0NI0fP16hoaFyc3NT165dtW3bNvvjiYmJGjVqlIKCguTu7q4+ffro8OHDlx13xYoVCg8Pl6urqyIiIvTNN9+U5WEA5SbXYtXqvfEa+s5m9Zn9sz7eelLnc6xqGuil6YNbasuknnqqbzgNKQAoZ4Y1pU6fPi2LxSJ/f/8C2/39/ZWQkFAqr2G1WjV+/Hhdf/31atGiRbH7TZ06Vd7e3vZb3bp1S+X1r1WLC0v49pIrBQAA/mbs2LFau3atFi1apKioKPXq1UuRkZGKjY2VzWbTgAED9Mcff+jzzz/Xrl27FBoaqsjISGVkZBQ75qZNmzR8+HCNGTNGu3bt0oABAzRgwADt3bu3HI8MKF1nMrL13/VH1H36j3po8U79euyMHMwm9YsI1P/+0UXfPNZNQzrUlauTg9GlAkC1VKWvvvfII49o79692rhx4yX3mzRpkiZMmGC/n5qaWiEaU4SdAwCAi2VmZurTTz/V559/bo8mmDx5sr788ku9/fbbGjFihLZs2aK9e/eqefPmkqS3335bAQEB+vjjjzV27Ngix33jjTfUp08fTZw4UZI0ZcoUrV27VnPnztW8efPK5+CAUrIvLkUfbjquz3fHKSs3b4leLQ9nDe9YV/d2DlWgt5vBFQIAJAObUnXq1JGDg4MSExMLbE9MTFRAQMA1jz9u3Dh99dVX2rBhg0JCQi65r4uLi1xcXK75NUtbRLCPpLyw81yLVY4Ohl8sEQAAGCw3N1cWi0Wurq4Ftru5uWnjxo0aOnSoJBV43Gw2y8XFRRs3biy2KbV58+YCH9JJUu/evbVq1arSPQCgjORYrPpuX6I+3HRcW4+fsW9vEeylkV3CdHurIGZEAUAFY1hTytnZWe3atdO6des0YMAASXnL7datW6dx48aVeFybzaZHH31Un332mdavX6/69euXUsXlr0Edj7+FnWeoSQBh5wAAVHeenp7q0qWLpkyZoqZNm8rf318ff/yxNm/erEaNGik8PFz16tXTpEmT9M4778jDw0Ovv/66YmJiFB8fX+y4CQkJVx2rkJWVpaysLPv9ipDLiernz/QsLdt2Uos2n1BC6nlJkqPZpD4tAjT6+jC1rVeTq+gBQAVl6PK9CRMmaOTIkWrfvr06duyo2bNnKyMjw341vhEjRig4OFhTp06VlBeOvn//fvvXsbGx2r17t2rUqKFGjRpJyluyt3TpUn3++efy9PS0n0h5e3vLza1yTdM1Xwg733r8jKJiU2hKAQAASdKiRYt0//33Kzg4WA4ODmrbtq2GDx+uHTt2yMnJSStXrtSYMWNUq1YtOTg4KDIyUn379pXNZivVOqZOnaoXXnihVMcErlRUTIoWbjquL/fEKfvCEr06NZx1d8d6uqdzqPy9XC8zAgDAaIY2pYYOHapTp07pueeeU0JCglq3bq3Vq1fbP6WLjo6W2fzXkrW4uDi1adPGfn/GjBmaMWOGevToofXr10vKy0yQpBtvvLHAay1YsECjRo0q0+MpCy2C85pSe2NTdGe7Sy9DBAAA1UPDhg31008/KSMjQ6mpqQoMDNTQoUPVoEEDSVK7du20e/dupaSkKDs7W76+vurUqZPat29f7JgBAQFXHatQUXM5UXXlWKz6dm+CPtx0XDtOnLVvbxXirZFdw9SvZaBcHFmiBwCVheFB5+PGjSt2uV5+oylfWFjYZT/hK+1PAI1G2DkAACiOh4eHPDw8dPbsWa1Zs0bTp08v8Li3d96VfA8fPqzt27drypQpxY7VpUsXrVu3TuPHj7dvW7t2rbp06VLscypqLieqnlNpWfp4a7SW/HpCial5S0adHEy6NSJQo7qGqU29mgZXCAAoCcObUrg0ws4BAMDF1qxZI5vNpiZNmujIkSOaOHGiwsPD7REIK1askK+vr+rVq6eoqCg9/vjjGjBggHr16mUf4+KYhMcff1w9evTQzJkz1a9fPy1btkzbt2/Xu+++a8gxApL028lkfbjpuL7aE69sS/4SPRfd06me7ulUT34s0QOASo2mVAVH2DkAALhYSkqKJk2apJiYGNWqVUuDBw/Wyy+/LCcnJ0lSfHy8JkyYoMTERAUGBmrEiBF69tlnC4xxcUxC165dtXTpUj3zzDN6+umn1bhxY61atUotWrQo12MDsnOt+nZvvBb8cly7Tybbt7eu66PR14epb4tAOTvyQS0AVAUmW1Vb71YKUlNT5e3trZSUFHl5eRldjobM26ytx89oxl2tyJUCAKAcVbRzgoqO9wvXIin1vJb8Gq2lW6N1Ku2vJXq3twzSyK5halXXx9gCAQBX7ErPCZgpVQkQdg4AAICqalf0WS3cdFzfRMUrx5L3ebmfp4vu7Ryq4R3rydeT3DIAqKpoSlUCLUPyQkoJOwcAAEBVkJVr0dd74vXhpuP6Leavc9x2oTU1qmuY+rQIkBNZqgBQ5dGUqgRaBOc1pQg7BwAAQGWWmHpeS7ac0NKt0Tqdni1JcnY0645WQRrVNcx+3gsAqB5oSlUChJ0DAACgsrLZbNoZfVYLfjmu1XsTlGvNW6IX4OWq+7qEaliHuqpdgyV6AFAd0ZSqBMxmk5oH5eVKRcWm0JQCAABAhXc+x6Ivf4vTh5uPa29sqn17x7BaGtk1TL2a+7NEDwCqOZpSlQRh5wAAAKgM4lMytXjLCX289aTOZOQt0XNxNKt/67yr6DUPYokeACAPTalKgrBzAAAAVGTbjp/Rwl+Oa/W+BFkuLNEL8nbVfV3CNKxDXdX0cDa4QgBARUNTqpLID33cF5dC2DkAAAAqjLTzOXr+831auSvWvq1zg1oa1TVMkU39OW8FABSLplQlQdg5AAAAKprtx89o/PLdijmbKbNJGtK+rkZ2DVPTQC+jSwMAVAI0pSoJws4BAABQUeRarHrzhyOa+8NhWW1SSE03zR7aWu3DahldGgCgEmEubSUScSFXai+5UgAAADBI9J/ndNc7m/XmuryG1KA2wfrm8RtoSAEArhozpSqRiGDCzgEAAGAMm82mlTtj9dzne5WRbZGnq6NeGtBC/VsHG10aAKCSoilViRB2DgAAACOknMvRf1ZF6as98ZKkjmG1NGtoK4XUdDe4MgBAZUZTqhIh7BwAAADlbfPRP/XE/3YrLuW8HM0m/euW6/RQj4ZyMJuMLg0AUMnRlKpECDsHAABAecnOter17w9p3k9HZbNJYbXdNXtYG7Wu62N0aQCAKoL1X5UMYecAAAAoa0dPpWvw25v09vq8htTQ9nX19WM30JACAJQqZkpVMvlh53tiko0tBAAAAFWOzWbTsm0n9eKX+5WZY5G3m5OmDYpQ34hAo0sDAFRBNKUqmfyw8/3xqYSdAwAAoNScycjWU5/u0Xf7EyVJXRvW1swhrRTo7WZwZQCAqoqmVCVD2DkAAABK28+HT+mJ//2mpLQsOTmY9H+9wzWmW32ZCTMHAJQhmlKVjNlsUvNgb209Rtg5AAAArk1WrkWvrT6o9zcekyQ19PXQG8Pa2GfnAwBQllj7VQnl50oRdg4AAICSOpSYpv5zf7E3pO7tXE9fPXoDDSkAQLlhplQlRNg5AAAASspms2nRlhN6+esDysq1qpaHs6YPbqnIZv5GlwYAqGZoSlVChJ0DAACgJE6lZen/PvlNPx48JUnqcZ2vXrurpfw8XQ2uDABQHdGUqoQIOwcAAMDV+vH3JE385DedTs+Ws6NZT/cN18iuYTKZCDMHABiDplQlRNg5AAAArtT5HIte+eaAPtp8QpIUHuCpN4a14RwSAGA41n1VUvm5UlHkSgEAAKAY++NSdfucjfaG1P3X19eqR66nIQUAqBCYKVVJ2ZtSXIEPAAAAF7FabZr/yzFNX31Q2RarfD1dNOOuVupxna/RpQEAYEdTqpIi7BwAAABFSUw9rydX/KafD5+WJEU29dergyNUu4aLwZUBAFAQTalKirBzAAAAXGzNvgQ99ekenT2XI1cns569rZnu7liPMHMAQIVEU6qSIuwcAAAA+c5l52rKV/v18daTkqTmQV56Y1gbNfKrYXBlAAAUjzVflRhh5wAAANgTk6zb3tyoj7eelMkk/aNHA3328PU0pAAAFR4zpSoxws4BAACqL4vVpnc2HNWs7w4p12pTgJerZg1ppa6N6hhdGgAAV4SmVCVG2DkAAED1FJecqX8t361fj52RJPVtEaCpgyLk4+5scGUAAFw5mlKVGGHnAAAA1c9Xe+L09MoopZ7Plbuzgybf0Vx3tQshzBwAUOnQlKrE/h52vicmmaYUAABAFZZ2PkeTv9ivT3fGSJJa1fXRG0NbK6yOh8GVAQBQMqz3quTyc6X2kisFAABQZe04cVb93tyoT3fGyGySHru5kT55qAsNKQBApcZMqUqOsHMAAICqK9di1Vs/HtWbPxyWxWpTsI+bZg9rrQ5htYwuDQCAa0ZTqpKLCCHsHAAAoCo6eeacxi/frR0nzkqS+rcO0pQBLeTl6mRwZQAAlA6aUpVc/doequHiqPSsXMLOAQAAqgCbzaZVu2P17Kp9Ss/KlaeLo6YMaKEBbYKNLg0AgFLFtJpKzmw2qVmQlyRpT0yyscUAAIBykZaWpvHjxys0NFRubm7q2rWrtm3bZn88PT1d48aNU0hIiNzc3NSsWTPNmzfvkmMuXLhQJpOpwM3V1bWsDwUXScnM0WPLdutfy39Telau2ofW1DeP30BDCgBQJTFTqgqIuHAFvr2xKbqrfV2jywEAAGVs7Nix2rt3rxYtWqSgoCAtXrxYkZGR2r9/v4KDgzVhwgT98MMPWrx4scLCwvTdd9/p4YcfVlBQkO64445ix/Xy8tLBgwft900mU3kcDi749Y8/NeF/vyk2OVMOZpMe79lYD9/YkHgGAECVxU+4KoCwcwAAqo/MzEx9+umnmj59urp3765GjRpp8uTJatSokd5++21J0qZNmzRy5EjdeOONCgsL04MPPqhWrVpp69atlxzbZDIpICDAfvP39y+PQ6r2cixWvbbmdw17b4tikzMVWttdnzzURY/1bExDCgBQpfFTrgq4OOwcAABUXbm5ubJYLIWW1rm5uWnjxo2SpK5du+qLL75QbGysbDabfvzxRx06dEi9evW65Njp6ekKDQ1V3bp11b9/f+3bt6/MjgN5jp3O0J1vb9JbPx6VzSbd1S5EXz92g9rUq2l0aQAAlDmW71UBfw87P3IqXeEBXkaXBAAAyoinp6e6dOmiKVOmqGnTpvL399fHH3+szZs3q1GjRpKkOXPm6MEHH1RISIgcHR1lNpv13nvvqXv37sWO26RJE82fP18tW7ZUSkqKZsyYoa5du2rfvn0KCQkp8jlZWVnKysqy309NTS3dg63CbDab/rf9pF74cr/OZVvk5eqoqYNaql/LQKNLAwCg3Bg+U+qtt95SWFiYXF1d1alTp0tOK9+3b58GDx6ssLAwmUwmzZ49+5rHrAr+HnYeFcMSPgAAqrpFixbJZrMpODhYLi4uevPNNzV8+HCZzXmndnPmzNGWLVv0xRdfaMeOHZo5c6YeeeQRff/998WO2aVLF40YMUKtW7dWjx49tHLlSvn6+uqdd94p9jlTp06Vt7e3/Va3LtmWV+r9n4/p359G6Vy2RZ0b1NLq8d1pSAEAqh1Dm1LLly/XhAkT9Pzzz2vnzp1q1aqVevfuraSkpCL3P3funBo0aKBp06YpICCgVMasKvJzpfaSKwUAQJXXsGFD/fTTT0pPT9fJkye1detW5eTkqEGDBsrMzNTTTz+tWbNm6fbbb1fLli01btw4DR06VDNmzLji13ByclKbNm105MiRYveZNGmSUlJS7LeTJ0+WxuFVC1/8FidJ+kf3BloytrOCfNwMrggAgPJnaFNq1qxZeuCBBzR69Gj7pYrd3d01f/78Ivfv0KGDXnvtNQ0bNkwuLi6lMmZV0TKEsHMAAKobDw8PBQYG6uzZs1qzZo369++vnJwc5eTk2GdN5XNwcJDVeuXZkxaLRVFRUQoMLH72jouLi7y8vArccHlZuRb9npC31PHezqFyMHOVQwBA9WRYUyo7O1s7duxQZGTkX8WYzYqMjNTmzZsrzJiVRYtgws4BAKgu1qxZo9WrV+vYsWNau3atbrrpJoWHh2v06NHy8vJSjx49NHHiRK1fv17Hjh3TwoUL9dFHH2ngwIH2MUaMGKFJkybZ77/44ov67rvv9Mcff2jnzp269957deLECY0dO9aIQ6zSDiWkK8dik4+7k0JqMkMKAFB9GRZ0fvr0aVkslkKXGvb399fvv/9ermNWhZBOws4BAKg+UlJSNGnSJMXExKhWrVoaPHiwXn75ZTk5OUmSli1bpkmTJumee+7RmTNnFBoaqpdfflkPPfSQfYzo6OgCs6nOnj2rBx54QAkJCapZs6batWunTZs2qVmzZuV+fFXdnthkSXnxCyYTs6QAANUXV99TXkjnCy+8YHQZ1yQ/7HzrsTOKikmhKQUAQBU2ZMgQDRkypNjHAwICtGDBgkuOsX79+gL3X3/9db3++uulUR4uI//CNPmZoAAAVFeGLd+rU6eOHBwclJiYWGB7YmJisSHmZTVmVQnpJOwcAACg4ttzoSmVnwkKAEB1ZVhTytnZWe3atdO6devs26xWq9atW6cuXbqU65hVJaSTsHMAAICK7XyORYcS0yRJESE+xhYDAIDBDF2+N2HCBI0cOVLt27dXx44dNXv2bGVkZGj06NGS8gI4g4ODNXXqVEl5Qeb79++3fx0bG6vdu3erRo0aatSo0RWNWZVdHHbu6GDoxRUBAABwkd8T0pRrtam2h7OCvF2NLgcAAEMZ2pQaOnSoTp06peeee04JCQlq3bq1Vq9ebQ8qvziAMy4uTm3atLHfnzFjhmbMmKEePXrYcxEuN2ZVRtg5AABAxRYVkyxJiggh5BwAAMODzseNG6dx48YV+djFAZxhYWGy2WzXNGZVRtg5AABAxbaHkHMAAOxY31XFtCTsHAAAoMLKz/6kKQUAAE2pKieCsHMAAIAKKTPbosNJ6ZKkloScAwBAU6qquTjsHAAAABXD/vhUWaw2+Xq6yN/LxehyAAAwHE2pKiY/7Px8jlVHTqUbXQ4AAAAuyA85bxlMyDkAABJNqSonP+xckqJiWMIHAABQUey5EK/QgjwpAAAk0ZSqkgg7BwAAqHjyPzBsGUJTCgAAiaZUlZQfdr6HphQAAECFkJGVq6MXohW48h4AAHloSlVB+VPCDxB2DgAAUCHsj0+V1SYFeLnKz8vV6HIAAKgQaEpVQYSdAwAAVCx7Lizdi2DpHgAAdjSlqiCz2aTmhJ0DAABUGPlX3mPpHgAAf6EpVUVFEHYOAABQYeRnfTJTCgCAv9CUqqIIOwcAAKgY0s7n6NjpDEnMlAIA4O9oSlVRhJ0DAABUDPviUmWzScE+bqpTw8XocgAAqDBoSlVRhJ0DAABUDPkZny2CvQyuBACAioWmVBVF2DkAAEDFkB+n0DLEx9hCAACoYGhKVWGEnQMAABgv/1yMPCkAAAqiKVWFEXYOAABgrJRMQs4BACgOTakqjLBzAAAAY+278OFg3VpuqunhbHA1AABULDSlqjDCzgEAAIy1h6V7AAAUi6ZUFUbYOQAAgLHyz8Eign2MLQQAgAqIplQVl/+pXBS5UgAAAOUuyn7lPWZKAQBwMZpSVVx+2DlNKQAAgPKVfC5b0WfOSZJaBNGUAgDgYjSlqjjCzgEAAIyR/6FgWG13ebs7GVwNAAAVD02pKo6wcwAAAGPsuZAn1YKQcwAAikRTqooj7BwAAMAY+ede5EkBAFA0mlLVAGHnAAAA5S//3Isr7wEAUDSaUtUAYecAAADl68/0LMUmZ0qSWgR7GVwNAAAVE02paiCCsHMAAIBylf9hYANfD3m6EnIOAEBRaEpVA2GEnQMAAJSr/DypCELOAQAoFk2pauDvYed7CDsHAAAoc3/lSdGUAgCgODSlqon8E6K95EoBAACUufymVMsQH2MLAQCgAqMpVU0Qdg4AAFA+ktLOKz7lvEwm2WerAwCAwmhKVROEnQMAAJSP/JnpDX1ryMPF0eBqAACouGhKVROEnQMAAJSP/AzPluRJAQBwSTSlqgnCzgEAqDrS0tI0fvx4hYaGys3NTV27dtW2bdvsj6enp2vcuHEKCQmRm5ubmjVrpnnz5l123BUrVig8PFyurq6KiIjQN998U5aHUWXlz5TKj08AAABFoylVjRB2DgCAccLCwvTiiy8qOjr6mscaO3as1q5dq0WLFikqKkq9evVSZGSkYmNjJUkTJkzQ6tWrtXjxYh04cEDjx4/XuHHj9MUXXxQ75qZNmzR8+HCNGTNGu3bt0oABAzRgwADt3bv3muutbuwzpWhKAQBwSTSlqhHCzgEAMM748eO1cuVKNWjQQLfccouWLVumrKysqx4nMzNTn376qaZPn67u3burUaNGmjx5sho1aqS3335bUl6DaeTIkbrxxhsVFhamBx98UK1atdLWrVuLHfeNN95Qnz59NHHiRDVt2lRTpkxR27ZtNXfu3BIfc3WUmHpeSWlZMpukZoE0pQAAuBSaUtVI/kyp/XGEnQMAUN7Gjx+v3bt3a+vWrWratKkeffRRBQYGaty4cdq5c+cVj5ObmyuLxSJXV9cC293c3LRx40ZJUteuXfXFF18oNjZWNptNP/74ow4dOqRevXoVO+7mzZsVGRlZYFvv3r21efPmqzhK5M+SauznKTdnB4OrAQCgYqMpVY3kh51n5Vp1OImwcwAAjNC2bVu9+eabiouL0/PPP6/3339fHTp0UOvWrTV//nzZbLZLPt/T01NdunTRlClTFBcXJ4vFosWLF2vz5s2Kj4+XJM2ZM0fNmjVTSEiInJ2d1adPH7311lvq3r17seMmJCTI39+/wDZ/f38lJCQU+5ysrCylpqYWuFV3UTHJksiTAgDgStCUqkb+HnbOEj4AAIyRk5Oj//3vf7rjjjv0xBNPqH379nr//fc1ePBgPf3007rnnnsuO8aiRYtks9kUHBwsFxcXvfnmmxo+fLjM5rxTuzlz5mjLli364osvtGPHDs2cOVOPPPKIvv/++1I9lqlTp8rb29t+q1u3bqmOXxnln2ORJwUAwOU5Gl0AyldEsLd+PXZGe2NTNKQ9J44AAJSXnTt3asGCBfr4449lNps1YsQIvf766woPD7fvM3DgQHXo0OGyYzVs2FA//fSTMjIylJqaqsDAQA0dOlQNGjRQZmamnn76aX322Wfq16+fJKlly5bavXu3ZsyYUWiJXr6AgAAlJiYW2JaYmKiAgIBi65g0aZImTJhgv5+amlqtG1M2m83elMqPTQAAAMVjplQ1Q9g5AADG6NChgw4fPqy3335bsbGxmjFjRoGGlCTVr19fw4YNu+IxPTw8FBgYqLNnz2rNmjXq37+/cnJylJOTY581lc/BwUFWa/GZkl26dNG6desKbFu7dq26dOlS7HNcXFzk5eVV4Fadxaec1+n0bDmaTWoaWL3fCwAArgQzpaqZi8POHR3oSwIAUB7++OMPhYaGXnIfDw8PLViw4LJjrVmzRjabTU2aNNGRI0c0ceJEhYeHa/To0XJyclKPHj00ceJEubm5KTQ0VD/99JM++ugjzZo1yz7GiBEjFBwcrKlTp0qSHn/8cfXo0UMzZ85Uv379tGzZMm3fvl3vvvvutR14NWIPOff3lKsTIecAAFwOHYlqhrBzAACMkZSUpF9//bXQ9l9//VXbt2+/qrFSUlL0yCOPKDw8XCNGjFC3bt20Zs0aOTk5SZKWLVumDh066J577lGzZs00bdo0vfzyy3rooYfsY0RHR9uD0aW8K/YtXbpU7777rlq1aqVPPvlEq1atUosWLUp4xNXP3vw8KZbuAQBwRZgpVc3kh53/euyMomJTmFoOAEA5eeSRR/R///d/6tSpU4HtsbGxevXVV4tsWBVnyJAhGjJkSLGPBwQEXHbG1fr16wttu+uuu3TXXXddcR0oaE9+nhQh5wAAXBFmSlVD+VeD2UuuFAAA5Wb//v1q27Ztoe1t2rTR/v37DagIpclmsykqJlkSV94DAOBK0ZSqhloEE3YOAEB5c3FxKXR1O0mKj4+XoyOT1yu7mLOZOnsuR04OJjUJ8DS6HAAAKgXDm1JvvfWWwsLC5Orqqk6dOmnr1q2X3H/FihUKDw+Xq6urIiIi9M033xR4PD09XePGjVNISIjc3NzUrFkzzZs3rywPodK5OOwcAACUvV69emnSpElKSfnrQ6Hk5GQ9/fTTuuWWWwysDKUh/8O+JgGecnEk5BwAgCthaFNq+fLlmjBhgp5//nnt3LlTrVq1Uu/evZWUlFTk/ps2bdLw4cM1ZswY7dq1SwMGDNCAAQO0d+9e+z4TJkzQ6tWrtXjxYh04cEDjx4/XuHHj9MUXX5TXYVV4hJ0DAFD+ZsyYoZMnTyo0NFQ33XSTbrrpJtWvX18JCQmaOXOm0eXhGuU3pSKCfYwtBACASsTQptSsWbP0wAMPaPTo0fYZTe7u7po/f36R+7/xxhvq06ePJk6cqKZNm2rKlClq27at5s6da99n06ZNGjlypG688UaFhYXpwQcfVKtWrS47A6s6yQ87l1jCBwBAeQkODtaePXs0ffp0NWvWTO3atdMbb7yhqKgo1a1b1+jycI2iYi5ceY88KQAArphhTans7Gzt2LFDkZGRfxVjNisyMlKbN28u8jmbN28usL8k9e7du8D+Xbt21RdffKHY2FjZbDb9+OOPOnTokHr16lU2B1JJEXYOAED58/Dw0IMPPqi33npLM2bM0IgRI+Tk5GR0WbhGNptNey6EnOfHJAAAgMszLFXz9OnTslgs8vf3L7Dd399fv//+e5HPSUhIKHL/hIQE+/05c+bowQcfVEhIiBwdHWU2m/Xee++pe/fuxdaSlZWlrKws+/3U1NSSHFKlQtg5AADG2L9/v6Kjo5WdnV1g+x133GFQRbhW0WfOKfV8rpwdzLrOn5BzAACuVJW71MucOXO0ZcsWffHFFwoNDdWGDRv0yCOPKCgoqNAsq3xTp07VCy+8UM6VGuvisHNHB8Mz7wEAqNL++OMPDRw4UFFRUTKZTLLZbJIkk8kkSbJYLEaWh2uw58LSvaaBnnJ25JwKAIArVaKfmidPnlRMTIz9/tatWzV+/Hi9++67VzxGnTp15ODgUOjSyImJiQoICCjyOQEBAZfcPzMzU08//bRmzZql22+/XS1bttS4ceM0dOhQzZgxo9ha8q+Ek387efLkFR9HZUXYOQAA5evxxx9X/fr1lZSUJHd3d+3bt08bNmxQ+/bttX79eqPLwzXIj0OIIE8KAICrUqKm1N13360ff/xRUt6SultuuUVbt27Vf/7zH7344otXNIazs7PatWundevW2bdZrVatW7dOXbp0KfI5Xbp0KbC/JK1du9a+f05OjnJycmQ2FzwsBwcHWa3WYmtxcXGRl5dXgVtVZzab1CKYsHMAAMrL5s2b9eKLL6pOnToym80ym83q1q2bpk6dqscee8zo8nAN8mdKteTKewAAXJUSNaX27t2rjh07SpL+97//qUWLFtq0aZOWLFmihQsXXvE4EyZM0HvvvacPP/xQBw4c0D//+U9lZGRo9OjRkqQRI0Zo0qRJ9v0ff/xxrV69WjNnztTvv/+uyZMna/v27Ro3bpwkycvLSz169NDEiRO1fv16HTt2TAsXLtRHH32kgQMHluRQq7T8JXyEnQMAUPYsFos8PfPyhurUqaO4uDhJUmhoqA4ePGhkabgGVquNmVIAAJRQiTKlcnJy5OLiIkn6/vvv7cGc4eHhio+Pv+Jxhg4dqlOnTum5555TQkKCWrdurdWrV9vDzKOjowvMeuratauWLl2qZ555Rk8//bQaN26sVatWqUWLFvZ9li1bpkmTJumee+7RmTNnFBoaqpdfflkPPfRQSQ61SssPO8//dA8AAJSdFi1a6LffflP9+vXVqVMnTZ8+Xc7Oznr33XfVoEEDo8tDCR3/M0NpWblycTSrsV8No8sBAKBSKVFTqnnz5po3b5769euntWvXasqUKZKkuLg41a5d+6rGGjdunH2m08WKyle46667dNdddxU7XkBAgBYsWHBVNVRX+TOlDsQTdg4AQFl75plnlJGRIUl68cUXddttt+mGG25Q7dq1tXz5coOrQ0nlxyA0C/LiXAoAgKtUoqbUq6++qoEDB+q1117TyJEj1apVK0nSF198YV/Wh4ovP+w8PStXh5PS1TSw6mdpAQBglN69e9u/btSokX7//XedOXNGNWvWtF+BD5VPlD1PiqV7AABcrRI1pW688UadPn1aqampqlmz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",
"text/plain": [
"<Figure size 1200x500 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from modulefinder import test\n",
"import torch\n",
"from torch.utils.data import DataLoader # 显式导入DataLoader\n",
"import torch.nn as nn\n",
"from torchvision import datasets, transforms\n",
"from tqdm import tqdm\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 处理数据\n",
"transform = transforms.Compose([\n",
" transforms.ToTensor(), # 添加 ToTensor\n",
" transforms.Normalize(mean=[0.5],std=[0.5])\n",
"])\n",
"\n",
"# 导入数据\n",
"trainset = datasets.MNIST(root='./data',train=True,download=True,transform=transform)\n",
"testset = datasets.MNIST(root='./data',train=False,download=True,transform=transform) # 修正测试集\n",
"\n",
"trainloader = DataLoader(trainset,batch_size=64,shuffle=True)\n",
"testloader = DataLoader(testset,batch_size=64,shuffle=False) # 使用正确的测试集\n",
"\n",
"class SimpleNet(nn.Module):\n",
" def __init__(self):\n",
" super(SimpleNet,self).__init__()\n",
" self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1)\n",
" self.relu1 = nn.ReLU()\n",
" self.pool1 = nn.MaxPool2d(kernel_size=2)\n",
" \n",
" self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1)\n",
" self.relu2 = nn.ReLU()\n",
" self.pool2 = nn.MaxPool2d(kernel_size=2)\n",
" \n",
" self.flat = nn.Flatten()\n",
" self.fc1 = nn.Linear(64 * 5 * 5, 128)\n",
" self.fc2 = nn.Linear(128, 10)\n",
"\n",
" def forward(self, x):\n",
" x = self.pool1(self.relu1(self.conv1(x)))\n",
" x = self.pool2(self.relu2(self.conv2(x)))\n",
" x = self.flat(x)\n",
" x = self.fc1(x)\n",
" x = self.fc2(x)\n",
" return x\n",
"\n",
"model = SimpleNet()\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"\n",
"model.to(device)\n",
"\n",
"criterion = nn.CrossEntropyLoss()\n",
"optimizer = torch.optim.Adam(model.parameters(),lr=0.001)\n",
"\n",
"epochs = 10\n",
"train_losses = []\n",
"train_accuracies = []\n",
"\n",
"for epoch in range(epochs):\n",
" running_loss = 0.0\n",
" correct = 0\n",
" total = 0\n",
"\n",
" train_iter = tqdm(trainloader, desc=f'Epoch {epoch+1}/{epochs}', unit='batch')\n",
"\n",
" for images,labels in train_iter:\n",
" images, labels = images.to(device), labels.to(device)\n",
" optimizer.zero_grad()\n",
"\n",
" output = model.forward(images)\n",
" loss = criterion(output,labels)\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" _,predicted = torch.max(output.data,1)\n",
" total += labels.size(0)\n",
" correct += (predicted == labels).sum().item()\n",
"\n",
" running_loss += loss.item()\n",
" train_iter.set_postfix({\n",
" 'Loss': f\"{running_loss / len(train_iter):.4f}\",\n",
" 'Accuracy': f\"{100 * correct / total:.2f}\"\n",
" })\n",
"\n",
" # 将统计信息移到循环外\n",
" epoch_loss = running_loss / len(trainloader)\n",
" epoch_acc = 100 * correct / total\n",
" train_losses.append(epoch_loss)\n",
" train_accuracies.append(epoch_acc) \n",
"\n",
"model.eval()\n",
"test_loss = 0.0\n",
"test_correct = 0\n",
"test_total = 0\n",
"\n",
"with torch.no_grad():\n",
" for images,labels in testloader:\n",
" images, labels = images.to(device), labels.to(device)\n",
" output = model.forward(images)\n",
" loss = criterion(output,labels)\n",
"\n",
" _,predicted = torch.max(output.data,1)\n",
" test_total += labels.size(0)\n",
" test_correct += (predicted == labels).sum().item()\n",
" test_loss += loss.item()\n",
"\n",
"test_loss /= len(testloader)\n",
"test_acc = 100 * test_correct / test_total\n",
"print(f\"Test Loss: {test_loss:.4f}, Test Accuracy: {test_acc:.2f}%\")\n",
"\n",
"torch.save({\n",
" 'model_state_dict':model.state_dict(),\n",
" 'optimizer_state_dict':optimizer.state_dict(),\n",
" 'model_definition':SimpleNet\n",
"},'./models/mnist_model_cnn_torch.pth')\n",
"print(\"模型已保存 ./models/mnist_model_cnn_torch.pth\")\n",
"\n",
"# 训练结束后绘制曲线\n",
"plt.figure(figsize=(12, 5))\n",
"\n",
"# 绘制损失曲线\n",
"plt.subplot(1, 2, 1)\n",
"plt.plot(train_losses, label='Train Loss')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Loss')\n",
"plt.title('Training Loss')\n",
"plt.legend()\n",
"\n",
"\n",
"# 绘制准确率曲线\n",
"plt.subplot(1, 2, 2)\n",
"plt.plot(train_accuracies, label='Train Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.title('Training Accuracy')\n",
"plt.legend()\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Efl4TjQ8ITY2ts5fFSVp0aJFOnjwYJ3zxo4dq4MHD+r111+vPa+iokLPP/98ndyFF16o3r176/HHH1dpaekpl/fZZ5+FcPcA0Hy82I+PPfaYHn/8cd177726/fbbG3M4ABBSXuvIo0ePnrIfSfrDH/4gSRo8ePDpDwgRgXui4QlXXnmlHnzwQd100036+te/rm3btmnBggXq1atXndwPfvADPfPMM7rhhht0++23q3PnzlqwYIHatm0rSbV/WYyJidEf/vAHjR8/Xueff75uuukmdenSRQcPHtTq1auVkpKiN95447R7euONN2rfY7C6ulq5ubn69a9/LUm66qqrNGDAgFB/GwDgFF7rx8WLF+uee+7Rueeeq69+9av6y1/+Uufzo0ePrn0eIAA0N6915F/+8hc999xzmjhxonr16qWSkhItW7ZMy5cv14QJE3jqS5RgiIYn3HvvvSorK9OLL76ol19+WRdccIHeeust/exnP6uTS0pK0qpVq3TbbbfpqaeeUlJSkm688UZ9/etf16RJk2qLUJJGjBih9evX66GHHtIzzzyj0tJSZWZmKjs72/RclL/+9a/685//XPvxli1btGXLFklS165dGaIBtAiv9ePJPy7u3r1b3/ve9075/OrVqxmiAbQYr3XkJZdcovfee08vvfSSCgoKFBcXpz59+ujJJ5/Ubbfd1izfA7Q8n1Pf4w2ACDNnzhzdeeedOnDggLp06RLu7QCAZ9CPANAwOhJNwRCNiHPixAklJCTUflxRUaGvfe1rCgQC2rVrVxh3BgDhRT8CQMPoSIQKD+dGxLn22mvVvXt3DRo0SEVFRfrLX/6iHTt2aMGCBeHeGgCEFf0IAA2jIxEqDNGIOGPHjtUf/vAHLViwQIFAQOedd54WLlyoyZMnh3trABBW9CMANIyORKjwcG4AAAAAAIx4n2gAAAAAAIwYogEAAAAAMPLcc6KDwaAOHTqk5OTk2jc9B4DGcBxHJSUlysrKUkxMdP2tkI4EcCboRwCoX2P60XND9KFDh9StW7dwbwNAFNi/f7+6du0a7m2EFB0JIBToRwCon6Ufm22Injt3rh577DHl5+dr4MCB+t3vfqehQ4e6fl1ycnJzbQlAK+PVPmlqP0r/OaY2bdq43tMSCATOeK8AIkt8fPxpP+84jioqKuhH+hFodULZj80yRL/88su66667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",
"text/plain": [
"<Figure size 1200x400 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"图片 ./test/0.png 的预测结果0\n",
"概率分布:[9.9999154e-01 5.6558246e-08 3.9694714e-07 5.7686158e-09 4.9810051e-08\n",
" 1.6635587e-09 4.9098890e-06 1.9493548e-08 1.0571516e-06 2.1142114e-06]\n",
"----------------------------------------\n",
"图片 ./test/2.png 的预测结果2\n",
"概率分布:[2.3606985e-07 1.3911462e-07 9.9999619e-01 1.7604706e-06 1.4577779e-07\n",
" 3.0409397e-09 4.2655217e-09 8.3528255e-07 5.8725487e-07 9.2491959e-08]\n",
"----------------------------------------\n",
"图片 ./test/3.png 的预测结果3\n",
"概率分布:[1.3083167e-14 2.3400937e-10 5.6043814e-10 9.9999726e-01 8.9110906e-12\n",
" 1.3752571e-06 2.9259326e-15 1.3170462e-06 1.0465531e-09 3.7561829e-08]\n",
"----------------------------------------\n"
]
}
],
"source": [
"# 多图片同时预测\n",
"import torch\n",
"from PIL import Image\n",
"import torchvision.transforms as transforms\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 加载模型\n",
"checkpoint = torch.load('./models/mnist_model_cnn_torch.pth')\n",
"model = checkpoint['model_definition']()\n",
"model.load_state_dict(checkpoint['model_state_dict'])\n",
"model.eval() # 设置为评估模式\n",
"\n",
"# 图片预处理\n",
"transform = transforms.Compose([\n",
" transforms.Resize((28, 28)),\n",
" transforms.Grayscale(),\n",
" transforms.ToTensor(),\n",
" transforms.Normalize((0.5,), (0.5,))\n",
"])\n",
"\n",
"# 加载并预处理多个图片\n",
"image_paths = ['./test/0.png', './test/2.png', './test/3.png'] # 添加更多图片路径\n",
"images = [Image.open(path) for path in image_paths]\n",
"processed_images = torch.stack([transform(img) for img in images]) # 将多个图片堆叠成一个批次\n",
"\n",
"# 可视化预处理后的图片\n",
"fig, axes = plt.subplots(1, len(images), figsize=(12, 4))\n",
"for i, img in enumerate(processed_images):\n",
" axes[i].imshow(img.squeeze(), cmap='gray')\n",
" axes[i].set_title(f'Image {i+1}')\n",
"plt.show()\n",
"\n",
"# 进行预测\n",
"with torch.no_grad():\n",
" outputs = model(processed_images) # 直接传入批次数据\n",
" probabilities = torch.nn.functional.softmax(outputs, dim=1)\n",
" predicted_classes = torch.argmax(probabilities, dim=1).numpy()\n",
"\n",
"# 打印预测结果\n",
"for i, (path, pred, prob) in enumerate(zip(image_paths, predicted_classes, probabilities)):\n",
" print(f\"图片 {path} 的预测结果:{pred}\")\n",
" print(f\"概率分布:{prob.numpy()}\")\n",
" print(\"-\" * 40)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "ail-tf",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
}
},
"nbformat": 4,
"nbformat_minor": 2
}