Pytorch入门

目录

环境配置

查看cuda是否安装完成

sigmod与relu函数


环境配置

查看cuda是否安装完成

查看在该目录下是否存在该文件。

Pytorch入门

在cmd命令行输入nvcc- V可以查看你的cuda版本。

Pytorch入门

查看Pytorch版本以及GPU是否可用

Pytorch入门 

import torch

print(torch.__version__)
print('gpu:',torch.cuda.is_available())

sigmod与relu函数

Pytorch入门

 

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函数区别

上一篇:全连接神经网络 -2


下一篇:sigmoid/ReLu