import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F
class Net(torch.nn.Module):
def __init__(self):
super().__init__()
self.h1 = torch.nn.Linear(2, 10)
# self.a1=torch.nn.ReLU()
self.h2 = torch.nn.Linear(10, 2)
def forward(self, x):
# x=self.a1(self.h1(x)) # 使用这种写法,在print(net)时,会显示relu层
x = F.relu(self.h1(x)) # 这种写法不会显示relu层,对于无状态的函数,推荐使用F形式(简单)
x = self.h2(x)
return x
if __name__ == "__main__":
# test()
# 1. 数据准备
x0 = torch.normal(torch.ones(100, 2) * 1, 1)
y0 = torch.zeros(100, 1)
x1 = torch.normal(torch.ones(100, 2) * -2, 1)
y1 = torch.ones(100, 1)
x = torch.cat((x0, x1), dim=0)
y = torch.cat((y0, y1), dim=0).long().squeeze()
# 可视化数据
# plt.scatter(x0.numpy()[:, 0], x0.numpy()[:, 1], c="red", label="negtive")
# plt.scatter(x1.numpy()[:, 0], x1.numpy()[:, 1], c="green", label="positive")
# plt.legend()
# plt.show()
# 2. 定义网络
net = Net()
# 3. 训练
optimizer = torch.optim.SGD(net.parameters(), lr=0.02)
loss_F = torch.nn.CrossEntropyLoss()
for iter in range(100):
pred = net(x)
# arg1: 二维的原始输出(没有加softmax)
# arg2: 一维的batch_size的真实cls label(不是二维one hot编码)
loss = loss_F(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
plt.ion()
# 计算精度
if iter % 2 == 0:
print("*" * 8, "iter:", iter, "*" * 8)
loss_str = "loss: {:.4f}".format(loss.data.numpy())
print(loss_str)
probability = F.softmax(pred, dim=1)
pred_cls = torch.argmax(probability, dim=1)
equal = (pred_cls == y) # 返回的torch元素为0或1,不是bool类型
accuracy = torch.sum(equal).data.numpy() / 200
print("accuracy:", accuracy)
# 画图
plt.cla()
plt.scatter(x.numpy()[:, 0], x.numpy()[:, 1], c=pred_cls)
plt.text(1, -3.5, "accuracy:{}".format(accuracy))
plt.pause(0.2)
plt.ioff()
plt.show()
4. pytorch-简单分类
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 项目地址 我的github地址 目的 对手势数字数据集进行分类。数据采用./data/images/中的数据。其中...
- 深度智心 PyTorch发布已经有段时间了,最近越来越火,但周围用的人不是很多,很多人已经用习惯了Caffe或者T...
- 游泳池有很多问题,它自己的理想是成为一处海,可是差了一些味道。存在边界倒不是问题,海不是无边无际,海的边界就是陆地...