深度学习入门篇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。