山东大学暑期项目实训(一)
1.环境配置,使用anaconda搭建pytorch
anaconda的安装
- 官网:link
- 清华大学资源地址:link
- 下载完成后,按流程进行安装,中间可自行指定安装路径,进行到下图
请务必勾选第一项添加环境变量,其后按流程操作即可。
至此,anaconda安装完成,下面我们开始搭建环境
使用anaconda搭建pytorch环境
-
打开anaconda navigator
-
选择environment下的create选项,这里我们直接搭建是行不通的,还是之前提到过的网络问题。我们需要把系统默认的源下载地址改成我们自己的镜像地址,用的还是清华大学的资源
在 C:\Users\用户名 路径下有一个.condarc的记事本文件,我们将里面的内容修改为如下 -
修改完文件之后,我们再次创建新环境
-
我们来到anaconda的安装目录下,有一个名为envs的文件夹,选择我们刚刚新建的环境pytorch,其中有一个scripts文件夹,复制其路径
-
依旧右击此电脑—高级系统属性—环境变量
-
打开anaconda prompt,然后输入“activate pytorch”,将当前环境切换到刚刚创建的新环境pytorch
-
我们进入官方提供的地址生成pytorch的下载命令,链接:link
-
回车,执行命令下载文件
2.进行python和pychram的安装配置
这里展示已经安装好的配置
进行测试,先创建项目
测试代码
import torch
import torchvision
import torchvision.transforms as transforms
import torch.utils.data.dataloader as dataloader
import torch.nn as nn
import torch.optim as optim
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "3"
train_set = torchvision.datasets.MNIST(
root="./data",
train=True,
transform=transforms.ToTensor(),
download=True
)
train_loader = dataloader.DataLoader(
dataset=train_set,
batch_size=100,
shuffle=False,
)
test_set = torchvision.datasets.MNIST(
root="./data",
train=False,
transform=transforms.ToTensor(),
download=True
)
test_loader = dataloader.DataLoader(
dataset=test_set,
batch_size=100,
shuffle=False,
)
class NeuralNet(nn.Module):
def __init__(self, input_num, hidden_num, output_num):
super(NeuralNet, self).__init__()
self.fc1 = nn.Linear(input_num, hidden_num)
self.fc2 = nn.Linear(hidden_num, output_num)
self.relu = nn.ReLU()
def forward(self,x):
x = self.fc1(x)
x = self.relu(x)
y = self.fc2(x)
return y
epoches = 20
lr = 0.001
input_num = 784
hidden_num = 500
output_num = 10
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = NeuralNet(input_num, hidden_num, output_num)
model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=lr)
for epoch in range(epoches):
for i, data in enumerate(train_loader):
(images, labels) = data
images = images.reshape(-1, 28*28).to(device)
labels = labels.to(device)
output = model(images)
loss = criterion(output, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'
.format(epoch + 1, epoches, loss.item()))
with torch.no_grad():
correct = 0
total = 0
for images, labels in test_loader:
images = images.reshape(-1, 28*28).to(device)
labels = labels.to(device)
output = model(images)
_, predicted = torch.max(output, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print("The accuracy of total {} images: {}%".format(total, 100 * correct/total))