目录
环境配置
查看cuda是否安装完成
查看在该目录下是否存在该文件。
在cmd命令行输入nvcc- V可以查看你的cuda版本。
查看Pytorch版本以及GPU是否可用
import torch
print(torch.__version__)
print('gpu:',torch.cuda.is_available())
sigmod与relu函数
Relu是一个非常优秀的激活哈数,相比较于传统的sigmod函数,有三个作用:
1. 防止梯度弥散
2. 稀疏激活性
3. 加快计算
sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散,而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象。第二,relu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,也就是说这个神经元不会经历训练,即所谓的稀疏性。第三,relu函数的导数计算更快,程序实现就是一个if-else语句,而sigmoid函数要进行浮点四则运算。
在隐藏层,tanh函数要优于sigmoid函数,可以认为是sigmoid的平移版本,优势在于其取值范围介于-1 ~ 1之间,数据的平均值为0,而不像sigmoid为0.5,有类似数据中心化的效果。
在输出层,sigmoid也许会优于tanh函数,原因在于你希望输出结果的概率落在0 ~ 1 之间,比如二元分类,sigmoid可作为输出层的激活函数。
实际应用中,特别是深层网络在训练时,tanh和sigmoid会在端值趋于饱和,造成训练速度减慢,故深层网络的激活函数默认大多采用relu函数,浅层网络可以采用sigmoid和tanh函数。
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def tanh(x):
return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
def relu(x):
return np.maximum(0, x)
x = np.arange(-5, 5, 0.1)
fig,(ax1,ax2,ax3)=plt.subplots(3)
y1 = tanh(x)
ax1.plot(x, y1)
ax1.set_title('tanh')
ax1.axhline(ls='--', color='r')
ax1.axvline(ls='--', color='r')
y2 = sigmoid(x)
ax2.plot(x, y2)
ax2.set_title('sigmoid')
ax2.axhline(0.5, ls='--', color='r')
ax2.axvline(ls='--', color='r')
y3 = relu(x)
ax3.plot(x, y3)
ax3.set_title('relu')
ax3.axvline(ls='--', color='r')
plt.tight_layout()
plt.show()
参考网站:深度学习笔记(4)——Sigmoid和Relu激活函数的对比_迷川浩浩的博客-CSDN博客_sigmoid函数和relu函数区别