pytorch和GPU

文章目录

  • 前言
  • 一、pytorch是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.构建基本数据
  • 总结


前言

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不熟悉的同学,不必把他们当作太难的东西,试着跟不同的教程做一遍就熟悉了,不懂得地方跳过也没关系,直接使用就行了

你可能感兴趣的:(深度学习,python,pytorch,深度学习)