TensorFlow入门实战项目

122 阅读2分钟
  1. 训练模型代码,使用tensorflow提供的网络图片
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

(train_images, train_labels), (test_images,
                               test_labels) = datasets.mnist.load_data()

# 对数据进行归一化处理
# 常见的归一化方式有最值归一化(normalization)和均值方差归一化(standardization)

# 最值归一化(normalization)
# 把所有数据映射到0~1之间;只适用于有明显边间的情况,比如像素点中的像素值(0-255)。公式如下面2所示:
# x_scale= (x- x_min)/(x_max- x_min )
# 注:x为数据集中每一种特征的值;将数据集中的每一种特征都做映射;


# 它的另一个叫法是标准化,不管你中间过程如何,但最终它都会把数据的均值和方差分别控制为0和1。
# 如果我们应用的数据没有边界或边界不容易区分,或数据与数据间的差别非常大时,此方法就非常合适。
# 比如人的工资有人可能好几百万但是有人可能只有几千。公式如下面所示:
# x_scale= (x- x_mean)/S
# x_mean 为样本均值
# S 为样本的标准差

train_images, test_images = train_images / 255.0, test_images / 255.0

print(train_images.shape)
# plt.figure(figsize=(20,10))
# for i in range(20):
#     plt.subplot(4, 5, i+1)
#     plt.xticks([])
#     plt.yticks([])
#     plt.grid(False)
#     plt.imshow(train_images[i], cmap=plt.cm.binary)
#     plt.xlabel(train_labels[i])
# plt.show()


# 调整数据到我们需要的格式
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu',
                  input_shape=(28, 28, 1)),  # 卷积层1,卷积核3*3
    layers.MaxPooling2D((2, 2)),  # 池化层1,2*2采样
    layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3
    layers.MaxPooling2D((2, 2)),  # 池化层2,2*2采样

    layers.Flatten(),  # Flatten层,连接卷积层与全连接层
    layers.Dense(64, activation='relu'),  # 全连接层,特征进一步提取
    layers.Dense(10)  # 输出层,输出预期结果
])
# 打印网络结构
model.summary()

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(
                  from_logits=True),
              metrics=['accuracy'])

history = model.fit(train_images, train_labels, epochs=10,
                    validation_data=(test_images, test_labels))
model.save("1.h5")

此时会在当前工作路径下生成1.h5文件

  1. 使用生成模型
from keras.models import load_model
import numpy as np
import cv2
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

(train_images, train_labels), (test_images,
                               test_labels) = datasets.mnist.load_data()

new_model = load_model('1.h5')

image = train_images[1166]

img = image.reshape((1, 28, 28, 1))
predict = new_model.predict(img)
num = np.argmax(predict)

print('识别为:')
print(num)

cv2.imshow("Image1", image)
cv2.waitKey(0)

这样就可以使用自己生成的手写数字识别模型了 这就是tensorflow的使用流程