pytorch和GPU


前言

pytorch调用GPU


一、pytorch是什么?

通俗的讲,里面包括众多深度学习模块,简单使用过后就入门了。

二、使用步骤

1.引入库

代码如下(示例):

import torch
# todo 判断GPU是否可用
use_gpu = torch.cuda.is_available()

2.构建基本数据

包括一些训练集,分别用trX和trY表示,模型用model表示

trX = torch.Tensor([binary_encode(i, NUM_DIGITS) for i in range(101, 2 ** NUM_DIGITS)])
trY = torch.LongTensor([fizz_buzz_encode(i) for i in range(101, 2 ** NUM_DIGITS)])  # 目标值

模型类似搭建方式:

NUM_HIDDEN = 100
model = torch.nn.Sequential(
    torch.nn.Linear(NUM_DIGITS, NUM_HIDDEN),
    torch.nn.ReLU(),
    torch.nn.Linear(NUM_HIDDEN, 4)
)

损失函数和优化器定义

loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.05)

然后使用GPU

# todo 使用GPU和CPU
if use_gpu:
    model = model.cuda()
    loss_fn = loss_fn.cuda()
    trX = trX.cuda()
    trY = trY.cuda()

接下来训练时自动使用GPU

for epoch in range(10000):
    for start in range(0, len(trX), BATCH_SIZE):  # BATCH_SIZE小于len(trX),start取值0, len(trX)之间的BATCH_SIZE的倍数
        end = start + BATCH_SIZE
        batchX = trX[start:end]
        batchY = trY[start:end]
        y_pred = model(batchX)
        loss = loss_fn(y_pred, batchY)
        optimizer.zero_grad()
        # loss = loss.cpu()
        loss.backward()  # 利用一批样本减小损失训练
        optimizer.step()
        # Find loss on training data
        loss = loss_fn(model(trX), trY).item()  # item()的作用是取出单元素张量的元素值并返回该值,保持该元素类型不变。
        # 输出全部数据的损失
        print('Epoch:', epoch, 'Loss:', loss)

需要注意的是,测试集也要使用GPU,否则会报错

testX = torch.Tensor([binary_encode(i, NUM_DIGITS) for i in range(1, 101)])  # 转化为tensor
if use_gpu:
    testX = testX.cuda()

当然,之后的测试集目标值已经自动使用gpu中的model进行预测,不需要进行处理

with torch.no_grad():
    # model = model.cuda()
    testY = model(testX)

最后,别忘了将tensor从GPU中搬到CPU中,以便处理成numpy(假如需要的话)

testY = testY.cpu()
print(testY)
print(np.sum(testY.numpy().max(1)[1])

总结

对pytorch或GPU不熟悉的同学,不必把他们当作太难的东西,试着跟不同的教程做一遍就熟悉了,不懂得地方跳过也没关系,直接使用就行了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

古道西风瘦码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值