文章目录
前言
Pytorch是深度学习、机器学习中不可或缺的一个模块工具。相对于tensorflow而言,Pytorch对低版本语句的兼容性更好一些。因此我推荐出学者可以适当性的从pytorch着手学习相关内容。
如何在虚拟环境中安装Pytorch
1.确定你所需要的Pytorch版本:
1.1 系统的不同大致分为以下三类:
如果你没有NVDIA系列的独立显卡,那么我个人建议使用CPU版本。
2.利用Anaconda 创建一个虚拟环境
2.1 打开终端(Windows和Mac一样)
2.1.1首先看看我们的虚拟环境都有哪些:
conda env list
2.1.2 接着我们创建一个名称为thc的虚拟环境,并且配置3.8的python环境。(3.6也是可以的哦!)
代码如下:
conda create -n thc python=3.8
#加载好之后按y
激活虚拟环境
conda activate thc
2.1.3 在Pytorch官网里面选择相应的版本
https://pytorch.org/get-started/locally/
复制相应的代码:
如果想选择其他的版本可以从Previous Vision里面查找
将相应的代码输入到打开的虚拟环境中并执行:
2021 M1芯片 Mac为例:
pip install torch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1
2.1.4 打开Pycharm,匹配最新的环境。
安装环境工作到此全部结束。
—————————————————————————————————
以下是代码测试部分:
import torch
import torchvision
import torch.utils.data as Data
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import time
starttime = time.time()
torch.manual_seed(1)
EPOCH = 10
BATCH_SIZE = 64
LR = 0.005
N_TEST_IMG = 5
train_data = torchvision.datasets.MNIST(
root='MINIST',
train=True,
transform=torchvision.transforms.ToTensor(),
download=True
)
loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
print(train_data.train_data.size())
print(train_data.train_labels.size())
print(train_data.train_data[0])
plt.imshow(train_data.train_data[2].numpy(),cmap='Greys')
plt.title('%i'%train_data.train_labels[2])
plt.show()
class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(28 * 28, 128),
nn.Tanh(),
nn.Linear(128, 64),
nn.Tanh(),
nn.Linear(64, 32),
nn.Tanh(),
nn.Linear(32, 16),
nn.Tanh(),
nn.Linear(16, 3)
)
self.decoder = nn.Sequential(
nn.Linear(3, 16),
nn.Tanh(),
nn.Linear(16, 32),
nn.Tanh(),
nn.Linear(32, 64),
nn.Tanh(),
nn.Linear(64, 128),
nn.Tanh(),
nn.Linear(128, 28 * 28),
nn.Sigmoid()
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return encoded, decoded
Coder = AutoEncoder()
print(Coder)
optimizer = torch.optim.Adam(Coder.parameters(),lr=LR)
loss_func = nn.MSELoss()
for epoch in range(EPOCH):
for step,(x,y) in enumerate(loader):
b_x = x.view(-1,28*28)
b_y = x.view(-1,28*28)
b_label = y
encoded , decoded = Coder(b_x)
loss = loss_func(decoded,b_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step%5 == 0:
print('Epoch :', epoch,'|','train_loss:%.4f'%loss.data)
torch.save(Coder,'AutoEncoder.pkl')
print('________________________________________')
print('finish training')
endtime = time.time()
print('训练耗时:',(endtime - starttime))
Coder = AutoEncoder()
Coder = torch.load('AutoEncoder.pkl')
#数据的空间形式的表示
view_data = train_data.train_data[:200].view(-1, 28*28).type(torch.FloatTensor)/255.
encoded_data, _ = Coder(view_data) # 提取压缩的特征值
fig = plt.figure(2)
ax = Axes3D(fig) # 3D 图
# x, y, z 的数据值
X = encoded_data.data[:, 0].numpy()
Y = encoded_data.data[:, 1].numpy()
Z = encoded_data.data[:, 2].numpy()
print(X[0],Y[0],Z[0])
values = train_data.train_labels[:200].numpy() # 标签值
for x, y, z, s in zip(X, Y, Z, values):
c = cm.rainbow(int(255*s/9)) # 上色
ax.text(x, y, z, s, backgroundcolor=c) # 标位子
ax.set_xlim(X.min(), X.max())
ax.set_ylim(Y.min(), Y.max())
ax.set_zlim(Z.min(), Z.max())
plt.show()
# 原数据和生成数据的比较
plt.ion()
plt.show()
for i in range(10):
test_data = train_data.train_data[i].view(-1, 28 * 28).type(torch.FloatTensor) / 255.
_, result = Coder(test_data)
print('输入的数据的维度', train_data.train_data[i].size())
print('输出的结果的维度',result.size())
im_result = result.view(28, 28)
print(im_result.size())
plt.figure(1, figsize=(10, 3))
plt.subplot(121)
plt.title('test_data')
plt.imshow(train_data.train_data[i].numpy(), cmap='Greys')
plt.figure(1, figsize=(10, 4))
plt.subplot(122)
plt.title('result_data')
plt.imshow(im_result.detach().numpy(), cmap='Greys')
plt.show()
plt.pause(0.5)
plt.ioff()
代码来源:https://zhuanlan.zhihu.com/p/116769890
总结
以上便是pytorch的所有安装内容以及环境测试的代码。希望与大家一起早日完成科研大业!