目录
1.pycharm动态显示代码
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
data=torch.ones(100,2)
x0=torch.normal(2*data,1)#(均值,方差)
y0=torch.zeros(100)#第一类标签设置为0
x1=torch.normal(-2*data,1)
y1=torch.ones(100)#第一类标签设置为1
x=torch.cat((x0,x1)).type(torch.FloatTensor)#x1,x2合并成x并转化成Float
y=torch.cat((y0,y1)).type(torch.LongTensor)
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.classify=nn.Sequential(
nn.Linear(2,15),
nn.ReLU(),
nn.Linear(15,2),
nn.Softmax(dim=1)
)
def forward(self,x):
classification=self.classify(x)
return classification
net=Net()
optimizer=torch.optim.SGD(net.parameters(),lr=0.03)
loss_func=nn.CrossEntropyLoss()
plt.ion()
for epoch in range(100):
out=net(x)
loss=loss_func(out,y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch%2==0:
plt.cla()
classification=torch.max(out,1)[1]#返回每一行中最大值的下标
class_y=classification.data.numpy()
taget_y=y.data.numpy()
plt.scatter(x.data.numpy()[:,0],x.data.numpy()[:,1],c=class_y,s=100,cmap="RdYlGn")#c=class_y表示颜色随着class_y的值不同而变化,颜色模式采用"RdYlGn"
accuracy=sum(class_y==taget_y)/200
plt.text(1.5,-4,f'Accuracy={accuracy}',fontdict={'size':20,'color':'red'})
plt.pause(0.4)
plt.show()
plt.ioff()
plt.show()
2.pycharm结果
3.jupyter notebook 动态显示代码
与pycharm中代码整体类似,只是不用打开和关闭交互模式,使用display库中函数清空已经画的图像
from IPython import display
for epoch in range(100):
out=net(x)
loss=loss_func(out,y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch%2==0:
display.clear_output(wait=True)
classification=torch.max(out,1)[1]#返回每一行中最大值的下标
class_y=classification.data.numpy()
taget_y=y.data.numpy()
plt.scatter(x.data.numpy()[:,0],x.data.numpy()[:,1],c=class_y,s=100,cmap="RdYlGn")#c=class_y表示颜色随着class_y的值不同而变化,颜色模式采用"RdYlGn"
accuracy=sum(class_y==taget_y)/200
plt.text(1.5,-4,f'Accuracy={accuracy}',fontdict={'size':20,'color':'red'})
plt.pause(0.3)
plt.show()
4.jupyter notebook显示结果