深度学习深度学习(十三)TensorFlow2.0

 之前十一,十二章节,使用的都是TF1.0的版本和概念进行讲解。

现在TF升级到2.0了,变化蛮大,至少不大像兼容的样子。跑之前的 十一,十二章节代码,跑不动。

TF2.0主要用到的是keras包,这个确实写起来比1.0要简介非常非常多。下来逐个讲解。

首先安装,官网的,参考如下:

使用 pip 安装 TensorFlow

按顺序装吧,注意中途需要安装的插件,尽管安装即可。

注意,里面需要一个python的虚拟环境,这个我们直接用PyCharm吧,创建新项目本身就是一个干净的环境了。

这里有个坑。这个版本号称是支持CPU和GPU版本,但实际上我装上去后,直接还是报没有GPU的错。(当然,也有可能是因为我的电脑本身有英伟达的显卡原因)

按照错误提示,打开对应的网址(TF官方的),这里要按照里面的要求步骤,逐个逐个的安装英伟达的驱动,工具等(有链接地址)

https://www.tensorflow.org/install/gpu#software_requirements

深度学习深度学习(十三)TensorFlow2.0_第1张图片

注意,英伟达官网的驱动和工具下载选项里面有一个10,11,这个不是工具版本,而是win10,还是win11,我被这个可坑惨了。

一系列安装操作结束,设置环境变量,再跑代码,这个时候会告警:

2021-11-11 19:13:02.870676: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-11-11 19:13:03.326665: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2788 MB memory:  -> device: 0, name: Quadro P620, pci bus id: 0000:01:00.0, compute capability: 6.1
估计GPU还是没装上,不过代码已经能跑了,就不管了。

开跑TF训练,先来个经典的神经网络,官网入门级的教程就有:

import tensorflow as tf
import numpy as np
#获取训练数据
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


#创建模型
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),#输入层,将二维的图片28*28的数据展平成1*784
  tf.keras.layers.Dense(128, activation='relu'),#第一个隐藏层,输出是一个1*128的数据
  tf.keras.layers.Dropout(0.2),#过拟合处理,压平数据
  tf.keras.layers.Dense(10, activation='softmax')#第二个隐藏层,并输出1*10结果
])

#设定梯度迭代公式
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

#喂数据,进行训练
print("开始训练")
model.fit(x_train, y_train, epochs=5)
#验证数据
print("开始评估")
model.evaluate(x_test, y_test)

#用模型预测数据
print("开始预测")
predictions = model.predict(x_test)
print(predictions[0])
print(np.argmax(predictions[0]))

#保存和加载模型
print("保存和加载模型")
# Save the weights
model.save_weights('./checkpoints/TFHellowWorld')
# Create a new model instance 要用一样的模型
newModel = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),#输入层,将二维的图片28*28的数据展平成1*784
  tf.keras.layers.Dense(128, activation='relu'),#第一个隐藏层,输出是一个1*128的数据
  tf.keras.layers.Dropout(0.2),#过拟合处理,压平数据
  tf.keras.layers.Dense(10, activation='softmax')#第二个隐藏层,并输出1*10结果
])

# Restore the weights
newModel.load_weights('./checkpoints/TFHellowWorld')

predictions = newModel.predict(x_test)
print(predictions[0])
print(np.argmax(predictions[0]))

代码很简单,我们看看输入的数据的结构:

print(x_train.shape)
print(y_train.shape)


(60000, 28, 28)
(60000,)

x输入层,有60000个然后是一个28*28的一个数组,数组里面是0-255的灰度颜色值

运行结果如下:

C:\mywork\TFProject\venv\Scripts\python.exe C:/mywork/TFProject/TFHelloWorld.py
2021-11-12 14:44:35.673431: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-11-12 14:44:36.113231: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2788 MB memory:  -> device: 0, name: Quadro P620, pci bus id: 0000:01:00.0, compute capability: 6.1
开始训练
2021-11-12 14:44:36.486532: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.2898 - accuracy: 0.9161
Epoch 2/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.1371 - accuracy: 0.9601
Epoch 3/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.1048 - accuracy: 0.9686
Epoch 4/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.0842 - accuracy: 0.9739
Epoch 5/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.0719 - accuracy: 0.9770
开始评估
313/313 [==============================] - 0s 1ms/step - loss: 0.0742 - accuracy: 0.9765
开始预测
[7.57929399e-07 1.85131555e-08 1.98209709e-05 4.65952617e-04
 5.47128098e-12 8.23889820e-07 1.32992523e-11 9.99506712e-01
 1.08297805e-07 5.83323163e-06]
7
保存和加载模型
[7.57929399e-07 1.85131555e-08 1.98209709e-05 4.65952617e-04
 5.47128098e-12 8.23889820e-07 1.32992523e-11 9.99506712e-01
 1.08297805e-07 5.83323163e-06]
7

Process finished with exit code 0

另外,说到保存,也可以整个模型保存下来,这样便于暂停和接着训练:

# Create and train a new model instance.
model = create_model()
model.fit(train_images, train_labels, epochs=5)

# Save the entire model as a SavedModel.
!mkdir -p saved_model
model.save('saved_model/my_model')

new_model = tf.keras.models.load_model('saved_model/my_model')

# Check its architecture
new_model.summary()

保存模型很关键,现在TF支持的语言越来越多,训练好的模型,可以在其他多个场景中使用。

你可能感兴趣的:(深度学习深度学习,tensorflow,人工智能,python)