PyTorch安装与学会建立第一个神经网络

PyTorch

安装

1 创建conda虚拟环境
conda create -n PyTorch python=3.6
2 进入PyTorch虚拟环境
conda activate PyTorch
3 安装PyTorch
conda install pytorch torchvision torchaudio cpuonly -c pytorch

numpy与torch的转换与运算

import torch
import numpy as np

# numpy 与 torch 的矩阵转换
np_data = np.arange(6).reshape((2, 3))
torch_data = torch.from_numpy(np_data)  # 将numpy数据转化未torch数据
tensor2array = torch_data.numpy()  #将torch数据转换未numpy数据
print("\nnumpy", np_data, '\ntorch', torch_data,'\nnumpy',tensor2array)

# numpy 与 torch 的运算
data = [-1,-2,1,2]
tensor=torch.FloatTensor(data)  # 将数字转换为32位的浮点数
# abs
print(
    '\nabs',
    '\nnumpy',np.abs(data),
    '\ntorch',torch.abs(tensor)
)
# sin
print(
    '\nsin',
    '\nnumpy_sin',np.sin(data),
    '\ntorch_sin',torch.sin(tensor)
)
# mean 
print(
    '\nmean',
    '\nnumpy_mean',np.mean(data),
    '\ntorch_mean',torch.mean(tensor)
)
# matmul 乘
data = [[1,2],[3,4]]
tensor= torch.FloatTensor(data)
# data = np.array(data)
print(type(data))
# np.matmul(data,data) = data.dot(data)
# torch.mm(tensor,tensor) != tensor.dot(tensor) 后者是转换为一维向量的平方和
print(
    '\nnumpy:',np.matmul(data,data),
    '\ntorch:',torch.mm(tensor,tensor)
)

神经网络中的变量参数 Variable

import torch
from torch.autograd import Variable
# Variable 神经网络中的变量参数
tensor = torch.FloatTensor([[1,2],[2,3]])
variable = Variable(tensor,requires_grad=True)

t_out = torch.mean(tensor*tensor)  # x^2
v_out = torch.mean(variable*variable)

# 求误差的反向传递,variable会受影响
v_out.backward()
# v_out = 1/4*sum(var*var)
# 梯度 d(v_out)/d(var)=1/4*2*variable = varible/2
print(variable)
print(variable.data)
# variable.data 为 tensor 的形式
print(variable.data.numpy())
print(variable.grad)
print(t_out)
print(v_out)

激励函数

import torch
from torch.autograd import Variable
import torch.nn.functional as F
import matplotlib.pyplot as plt

# fake data
x = torch.linspace(-5,5,200)  # -5 到 5 之间的200个数
x = Variable(x)
x_np = x.data.numpy()

y_relu = F.relu(x).data.numpy()
y_sigmoid = F.sigmoid(x).data.numpy()
y_tanh = F.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()

plt.figure(1,figsize=(8,6))
plt.subplot(221)
plt.plot(x_np,y_relu,c='red',label='relu')
plt.ylim((-1,5))
plt.legend(loc='best')

plt.subplot(222)
plt.plot(x_np,y_sigmoid,c='red',label='sigmoid')
plt.ylim((-0.2,1.2))
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x_np,y_tanh,c='red',label='tanh')
plt.ylim((-1.2,1.2))
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x_np,y_softplus,c='red',label='softplus')
plt.ylim((-0.2,6))
plt.legend(loc='best')
plt.show()

建立第一个回归神经网络

import torch
from torch.autograd import Variable
import torch.nn.functional as F
import matplotlib.pyplot as plt


# 制造数据
x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)  # 将得到的一维数据转化为二维数据
y = x.pow(2) + 0.2*torch.rand(x.size())  # y值为x^2加噪点值
print(x)
print(y)
# plt.scatter(x.data.numpy(), y.data.numpy())
# plt.show()

class Net(torch.nn.Module):
    # 搭建这些层所需要的信息
    def __init__(self,n_features,n_hidden,n_output):
        super(Net, self).__init__()
        # n_features 输入层个数
        # n_hidden 隐藏层个数
        # n_output 输出层个数
        self.hidden = torch.nn.Linear(n_features,n_hidden)  # 构建一层神经网络(隐藏层
        self.predict = torch.nn.Linear(n_hidden, n_output)


    # 神经网络前向传递的过程,将前面的层信息放在foeward上一个一个组合起来。 搭流程图
    def forward(self,x):
        x = F.relu(self.hidden(x))  # 使用激励函数嵌套住隐藏层输出的信息
        x = self.predict(x)  # 获取输出层结果
        return x
net = Net(1, 10, 1)
print(net)
# 优化神经网络
# net.parameters() 神经网络的参数 lr 学习效率
optimizer = torch.optim.SGD(net.parameters(),lr=0.5)
# loss_func 计算误差的手段 
# MSELoss() 均方差 处理回归问题
loss_func = torch.nn.MSELoss()
for t in range(100):
    #训练
    prediction = net(x)
    # 计算误差
    loss = loss_func(prediction,y) 
    # 优化过程
    optimizer.zero_grad()  # 将所有参数的梯度降为 0 
    loss.backward()  # 反向传递计算结点梯度
    optimizer.step()  # 以学习效率0.5来优化节点中的梯度

结语

如果你发现文章有什么问题,欢迎留言指正。
如果你觉得这篇文章还可以,别忘记点个赞加个关注再走哦。
如果你不嫌弃,还可以关注微信公众号———梦码城(持续更新中)。
梦码在这里感激不尽!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦码城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值