tensorflow开发之 基于softmax的手写数字识别(含源码)


点击查看 (人工智能) 系列文章


训练过程

定义神经网络

在这里插入图片描述

模型训练

在这里插入图片描述

可视化训练结果

在这里插入图片描述

模型存储

在这里插入图片描述
在这里插入图片描述

模型加载

在这里插入图片描述

模型使用

在这里插入图片描述

源码

# 读取数据
import tensorflow as tf

mnist = tf.keras.datasets.mnist
(imgTrain, labelTrain),(imgTest, labelTest) = mnist.load_data(path='mnist.npz')
# 将2维矩阵变为1维向量
print('source data structure')
print(imgTrain.shape, type(imgTrain))
print(imgTest.shape, type(imgTest))

imgTrain = imgTrain.reshape(60000, 784)
imgTest = imgTest.reshape(10000, 784)

print('data structure after reshape')
print(imgTrain.shape, type(imgTrain))
print(imgTest.shape, type(imgTest))

# 数据归一化处理
imgTrain = imgTrain.astype('float32')
imgTest = imgTest.astype('float32')
imgTrain /= 255
imgTest /= 255
# 数据编码为one-hot
from keras.utils import np_utils

n_classes = 10
rstTrain = np_utils.to_categorical(labelTrain, n_classes)
rstTest = np_utils.to_categorical(labelTest, n_classes)

print(rstTrain[0], rstTrain.shape)
print(labelTrain[0], labelTrain.shape)
# 定义神经网络(数据流图)
from keras.models import Sequential
from keras.layers.core import Dense, Activation

# 第一层隐藏层
model = Sequential()
model.add(Dense(512, input_shape = (784,)))
model.add(Activation('relu'))

# 第二层隐藏层(上一层输出作为本层输入)
model.add(Dense(512))
model.add(Activation('relu'))

#最后一层输出层为10个数值
model.add(Dense(10))
model.add(Activation('softmax'))
# 编译模型
# compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
# 模型训练
#fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)

history = model.fit(imgTrain, rstTrain, batch_size=128, epochs=5, verbose=2, validation_data=(imgTest, rstTest))
# 可视化展示训练过程
import matplotlib.pyplot as plt
fig = plt.figure()
# 展示模型训练过程精度变化
plt.subplot(2, 1, 1)
plt.plot(history.history['accuracy']) # 训练准确率
plt.plot(history.history['val_accuracy']) #测试集上的准确率
plt.title('Model Accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(['train', 'test'], loc='lower right')
# 展示损失值变化
plt.subplot(2, 1, 2)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'test'], loc='upper right')
plt.tight_layout()
plt.show()
# 模型存储
# model.save(filepath),存储模型为一个独立的HDF5文件
# 其中含有模型训练结果、模型自身、配置参数以及用于恢复训练的优化器等
import os

modelName = ".\model\kerasMnist.h5"
if os.path.exists(modelName):
    os.remove(modelName)    
model.save(modelName)
print('save the trained model in %s'% modelName)
# 加载模型
# keras.models.load_model(filepath)
from keras.models import load_model

mnistModel = load_model(modelName)
# 模型在测试集上的结果评估
import numpy as np
lossMetrics = mnistModel.evaluate(imgTest, rstTest, verbose = 2)
print("测试数据最终损失值:{}".format(lossMetrics[0]))
print("测试数据精度:{}".format(lossMetrics[1] * 100))

# 模型对测试集进行预测
rstPredict = mnistModel.predict(imgTest)
rstPredict = np.argmax(rstPredict,axis=1)
correctDatas = np.nonzero(rstPredict == labelTest)[0]
wrongDatas = np.nonzero(rstPredict != labelTest)[0]
print("预测正确个数:{}".format(len(correctDatas)))
print("预测错误个数:{}".format(len(wrongDatas)))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,我无法提供基于tensorflow.js的在线数字识别的json文件。作为语言模型,我不能创建或提供任何实际的代码或数据文件。但我可以向您解释如何训练一个能够识别数字的模型,并将其导出为json文件,以便在tensorflow.js中使用。 首先,您需要准备一个数字的数据集。您可以使用MNIST数据集,它包大量的数字图像和对应的标签。您可以在TensorFlow中使用Keras API来加载和处理MNIST数据集。然后,您需要定义一个神经网络模型,用于训练您的数据集。您可以使用Keras API来创建和训练模型。在训练期间,您可以使用验证集来评估模型的性能。 一旦您的模型训练完成并表现良好,您可以将其导出为JSON格式。使用TensorFlow.js中的`tfjs-converter`库,您可以将您的Keras模型转换为TensorFlow.js格式。以下是一个示例代码片段,演示如何导出Keras模型并将其转换为TensorFlow.js格式: ``` import tensorflow as tf import tensorflowjs as tfjs # 加载和处理MNIST数据集 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 定义神经网络模型 model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) # 编译和训练模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test)) # 导出Keras模型为SavedModel格式 tf.saved_model.save(model, 'saved_model') # 将SavedModel转换为TensorFlow.js格式 tfjs.converters.convert_tf_saved_model('saved_model', 'tfjs_model') ``` 在上面的示例中,我们首先加载和处理MNIST数据集,然后定义了一个具有两个密集层的神经网络模型。我们使用`sparse_categorical_crossentropy`作为损失函数,因为我们的标签是整数形式的。我们使用`fit`方法来训练模型,并使用验证集来评估模型的性能。 一旦模型训练完成,我们将其保存为SavedModel格式,并使用`convert_tf_saved_model`函数将其转换为TensorFlow.js格式。转换后,您将获得一个包模型权重和架构的json文件和一个二进制文件。您可以在TensorFlow.js中使用这些文件来加载和使用您的模型。 希望这可以帮助您开始使用tensorflow.js创建数字识别模型!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放羊郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值