宠物美容网站建设合同书,杭州建设工程交易中心网站,免费浏览的网站入口,超兽vps群通过使用mnist#xff08;AI界的helloworld#xff09;手写数字模型训练集#xff0c;了解下AI工作的基本流程。
本例子#xff0c;要基于mnist数据集#xff08;该数据集包含了【0-9】的模型训练数据集和测试数据集#xff09;来完成一个手写数字识别的小demo。
mnist…通过使用mnistAI界的helloworld手写数字模型训练集了解下AI工作的基本流程。
本例子要基于mnist数据集该数据集包含了【0-9】的模型训练数据集和测试数据集来完成一个手写数字识别的小demo。
mnist数据集图片大小是28*28的黑白。包含了6w 训练数据和1w验证数据。
麻雀虽小五脏俱全。通过这个CV类型的demo需求我们会学到神经网络模型。
从数据加载到数据预处理再到训练模型保存模型。然后再通过模型来预测我们输入的图片数字。
通过整个过程下来对于像我这样初识AI深度学习者来说可以有一个非常好的体感。
我们通过kerastensorflow2.0来上手。
数据加载
keras 框架提供了现成的方法来获取mnist数据集
(x_train_image, y_train_label), (x_test_image, y_test_label) mnist.load_data()这个方法会返回两组数据集 train_imagetrain_label 训练数据集、分类标签 x_test_image, y_test_label验证数据集、分类标签
要想让机器识别一个图片需要对图片进行像素化将像素数据转换成 张量 矩阵数据。
mnist.load_data() 返回的就是已经转换好的张量矩阵数据。
在python中通过NumPy多维数组表示。
数据预处理
我们这个demo属于AI for CV 方向。
CV信息首先要像素化处理拿到张量信息。
# 转换成一维向量 28*28784
x_train x_train_image.reshape(60000, 784)
x_test x_test_image.reshape(10000, 784)# 标准化0-1
x_Test_normalize x_test.astype(float32) / 255
x_Train_normalize x_train.astype(float32) / 255
通过reshape方法将三维转换成二维同时通过量化将计算数据缩小但是不影响模型训练识别。 mnist图片数据是黑白位深为8位0-255表示像素信息。 通过可视化我们能大概看到图片的数字特征是怎么被感知到的。
同时将label标签数据转换成0-1的矩阵。
# 将训练集和测试集标签都进行独热码转化
y_TrainOneHot np_utils.to_categorical(y_train_label)
y_TestOneHot np_utils.to_categorical(y_test_label)构建模型
# 建立Sequential 模型
model Sequential()
# 建立输入层、隐藏层
model.add(Dense(units256,input_dim784,kernel_initializernormal,activationrelu))
# 建立输出层
model.add(Dense(units10,kernel_initializernormal,activationsoftmax))# 定义模型训练参数
model.compile(lossbinary_crossentropy, optimizeradam, metrics[accuracy])
定义神经网络模型参数。这里每一个参数都是一个非常深的学科但是工程使用了解下就可以了。
训练模型
# 开始训练
train_history model.fit(xx_Train_normalize, yy_TrainOneHot,validation_split0.2, epochs10, batch_size200, verbose2)
# 显示训练过程
show_train_history(train_history, accuracy, val_accuracy) 随着训练次数不断增加整个精确度也越来越高。
我们看下训练过程的日志。
Epoch 1/10
240/240 - 3s - loss: 0.1211 - accuracy: 0.8309 - val_loss: 0.0564 - val_accuracy: 0.9228 - 3s/epoch - 11ms/step
Epoch 2/10
240/240 - 1s - loss: 0.0492 - accuracy: 0.9312 - val_loss: 0.0392 - val_accuracy: 0.9470 - 831ms/epoch - 3ms/step
Epoch 3/10
240/240 - 1s - loss: 0.0360 - accuracy: 0.9495 - val_loss: 0.0313 - val_accuracy: 0.9570 - 890ms/epoch - 4ms/step
Epoch 4/10
240/240 - 1s - loss: 0.0286 - accuracy: 0.9598 - val_loss: 0.0278 - val_accuracy: 0.9610 - 900ms/epoch - 4ms/step
Epoch 5/10
240/240 - 1s - loss: 0.0239 - accuracy: 0.9675 - val_loss: 0.0243 - val_accuracy: 0.9679 - 1s/epoch - 5ms/step
Epoch 6/10
240/240 - 1s - loss: 0.0204 - accuracy: 0.9723 - val_loss: 0.0224 - val_accuracy: 0.9698 - 1s/epoch - 5ms/step
Epoch 7/10
240/240 - 1s - loss: 0.0177 - accuracy: 0.9772 - val_loss: 0.0210 - val_accuracy: 0.9714 - 1s/epoch - 4ms/step
Epoch 8/10
240/240 - 1s - loss: 0.0155 - accuracy: 0.9805 - val_loss: 0.0201 - val_accuracy: 0.9729 - 984ms/epoch - 4ms/step
Epoch 9/10
240/240 - 1s - loss: 0.0137 - accuracy: 0.9833 - val_loss: 0.0189 - val_accuracy: 0.9742 - 1s/epoch - 5ms/step
Epoch 10/10
240/240 - 1s - loss: 0.0122 - accuracy: 0.9861 - val_loss: 0.0182 - val_accuracy: 0.9751 - 975ms/epoch - 4ms/step
可以看到每一轮训练loss 的值在逐步变小accuracy 在逐步增加。
每一次训练模型中的损失函数在计算出一个参数给到优化器进行反向传播不断的调整神经元的权重。
模型训练好之后需要用测试数据集来验证模型的准确度。
scores model.evaluate(x_Test_normalize, y_TestOneHot)
print(accuracy, scores[1])accuracy 0.975600004196167保存模型
mode.save()
model.save(model.h5) #也可以保存到具体的文件中
保存的模型里面具体是什么了解神经网络原理之后大概能明白。其实模型里最重要的是 神经元的权重值 这个demo的模型我放到这里了。 https://gitee.com/wangqingpei/blogimages/blob/master/mnist-helloworld/test/model-mnist/model.h5
预测数据
我们准备几个手写的数字测试下。
读取本地图片文件
def get_local_image():img Image.open(3.png)img img.convert(L).resize((28, 28))img_array np.array(img)# 将像素值转换为0-1之间的浮点数img_array img_array.astype(float32) / 255.0img_array_result np.reshape(img_array, (1, 784))return img_array_result 加载模型进行预测
def autoNumberWord():model load_model(/Users/wangqingpei/Downloads/test/model-mnist/model.h5)img get_local_image()prediction model.predict(img)prediction_result np.argmax(prediction)print(本地文件预测, prediction_result)240/240 - 1s - loss: 0.0130 - accuracy: 0.9843 - val_loss: 0.0183 - val_accuracy: 0.9755 - 848ms/epoch - 4ms/step
Epoch 10/10
240/240 - 1s - loss: 0.0116 - accuracy: 0.9866 - val_loss: 0.0177 - val_accuracy: 0.9761 - 873ms/epoch - 4ms/step
313/313 [] - 1s 2ms/step - loss: 0.0167 - accuracy: 0.9767
accuracy 0.9767000079154968
1/1 [] - 0s 116ms/step
Backend MacOSX is interactive backend. Turning interactive mode on.
本地文件预测 3
学会使用AI数字助手 chartGPT
在学习过程中遇到问题要改变习惯用chartGPT。_
在学习这个demo的时候关于加载本地图片的地方我搞了半天不行后来求助chartGPT还是很方便的。 未来AI工具肯定是越来越产品化易使用。 但是要想跟AI对话需要对特定的领域有一定的理解。Prompt Engineer 也一定是趋势。