深度學習入門篇01(Tensorflow-gpu的安裝)
-
前期准備
Tensorflow-gpu的安裝 -
MLP(多層感知機的實現)
Perceptron(感知機)
1.前期准備
Tensorflow主要分為1.x和2.x,目前來說語法上最簡單的是2.x版本。其gpu版本的安裝也很方便,僅需要兩個依賴工具包(Cuda,cuDnn)即可,官網下的太慢,所以這里直接放出兩個工具包(對應tensorflow2.3.0版本)的鏈接:
CUDA和cuDNN鏈接
提取碼:
TWTW
以下是官網中工具包和對應版本的圖示:

想要知道更多版本的對應情況也可以去官網查看:
tensorflow-gpu版本對應表
CUDA的安裝很簡單直接下一步到安裝完成就行,然后將cuDnn文件夾解壓后的bin,include和lib文件夾替換CUDA安裝目錄下對應名字的文件夾就行

接下來開始安裝Tensorflow的gpu版本:
先將conda下載文件的路徑更換為清華源,防止下載失敗報錯
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
# 設置搜索時顯示通道地址
conda config --set show_channel_urls yes
Tips: 這里是一條一條執行喔,不是一次執行。
創建名為deeplearning的虛擬環境
conda create -n deeplearning python=3.7 #tf為虛擬環境名稱,可以換成自己的
創建之后需要激活才能使用
conda activate deeplearning
出現以下的前綴就代表進入了虛擬環境:

要注意此時的虛擬環境只是一個純凈的python環境,沒有依賴包。
然后用conda安裝Tensorflow-gpu版本,因為我的CUDA和cuDnn都是對應2.3.0版本的tensorflow的,所以在這里就直接安裝2.3.0版本的了
conda install tensorflow-gpu==2.3.0
裝好過后在pycharm或者shell中查看GPU是否可用就行了:
import tensorflow as tf
print(tf.test.is_gpu_available())
輸出以下信息就表示安裝完成且可用了,最重要的是最后的True:

到這里算是安裝完成了。
2.多層感知機的實現
感知機(感知器)算法可以說是最開始的機器學習算法,在這里可以簡單看作神經網絡中單個的神經元,再簡化一下說就是一個 y ( x ) = ω x + b y(x) = \omega x + b y(x)=ωx+b的函數。
多層感知器顧名思義就是多個感知器相連,其連接規則就是最基礎的全連接,可以使用Tensorflow2.0中Kersa框架來很快速的搭建一個多層感知機:
import time
from tensorflow import keras
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 加載數據集
fashion_mnist = keras.datasets.fashion_mnist
# 分為訓練集和測試集
(X_train_full, y_train_full), (X_text, y_text) = fashion_mnist.load_data() # 每個圖象為28*28的陣列
# 將訓練集再分出一個驗證集
X_valid, X_train = X_train_full[:5000] / 255.0, X_train_full[5000:] / 255.0 # 將像素值除以255,將所有像素值降低到0-1區間
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]
# 創建類名列表
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
# 建立一個具有兩個隱藏層的分類MLP
model = keras.models.Sequential() # Sequential模型為最簡單的,由順序連接的單層堆棧組成,成為順序API
model.add(keras.layers.Flatten(input_shape=[28, 28])) # Flatten簡單預處理,將圖像轉為一維數組,
# 也可不指定input_shape,則權重會在有數據輸入時才初始化
model.add(keras.layers.Dense(300, activation='relu'))
model.add(keras.layers.Dense(300, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax')) # 10類,且softmax將輸出整合到0-1區間且和為1
# 也可使用列表方式來創建model
# model = keras.models.Sequential([
# keras.layers.Flatten(input_shape=[28, 28]),
# keras.layers.Dense(300, activation='relu'),
# keras.layers.Dense(100, activation='relu'),
# keras.layers.Dense(10, activation='softmax')
# ])
# print(model.summary()) # 展示model的所有層的基本信息
# 指定損失函數和要使用的優化器
model.compile(loss=keras.losses.sparse_categorical_crossentropy, # 損失函數為多分類交叉熵
optimizer=keras.optimizers.SGD(), # 優化函數為隨機梯度下降
metrics=[keras.metrics.sparse_categorical_accuracy])
# model.compile(loss='sparse_categorical_crossentropy',
# optimizer='sgd',
# metrics=['accuracy'])
# 開始訓練
start = time.process_time()
history = model.fit(X_train, y_train, epochs=30, validation_data=(X_valid, y_valid))
# 根據每一輪的loss畫圖
pd.DataFrame(history.history).plot(figsize=(8, 5))
plt.grid(True)
plt.gca().set_ylim(0, 1) # 垂直坐標設為0-1區間
plt.show()
# 對新實例進行預測
X_new = X_text[:3] # 取測試集的前三個
y_proba = model.predict(X_new) # 輸出的是屬於每一類的概率
print(y_proba)
y_pred = model.predict_classes(X_new) # 輸出的是屬於的類,此語句在20210101后會拋棄
# 可用np.argmax(model.predict(x), axis=-1)代替
print(y_pred)
print(np.array(class_names)[y_pred])
end = time.process_time()
print('time cost:', end - start)
注意這個Fashion Mnist數據集較大,第一次使用會默認從官網下載,非常慢,可以提前下好放在C:\Users\用戶名.keras\datasets下,並命名為fashion-mnist。
