首页 >热点 > > 正文

今日热搜:Pytorch实现分类器

博客园 2023-04-17 15:44:23

本文实现两个分类器: softmax分类器和感知机分类器


(资料图)

Softmax分类器

Softmax分类是一种常用的多类别分类算法,它可以将输入数据映射到一个概率分布上。Softmax分类首先将输入数据通过线性变换得到一个向量,然后将向量中的每个元素进行指数函数运算,最后将指数运算结果归一化得到一个概率分布。这个概率分布可以被解释为每个类别的概率估计。

定义

定义一个softmax分类器类:

class SoftmaxClassifier(nn.Module):    def __init__(self,input_size,output_size):        # 调用父类的__init__()方法进行初始化        super(SoftmaxClassifier,self).__init__()        # 定义一个nn.Linear对象,用于将输入特征映射到输出类别        self.linear = nn.Linear(input_size,output_size)    def forward(self,x):        x = self.linear(x) # 传递给线性层        return nn.functional.softmax(x,dim=1) # 得到概率分布    def compute_accuracy(self,output,labels):        preds = torch.argmax(output,dim=1) # 获取每个样本的预测标签        correct = torch.sum(preds == labels).item() # 计算正确预测的数量        accuracy = correct / len(labels) # 除以总样本数得到准确率        return accuracy

如上定义三个方法:

__init__(self):构造函数,在类初始化时运行,调用父类的__init__()方法进行初始化forward(self):模型前向计算过程compute_accuracy(self):计算模型的预测准确率训练

生成训练数据:

import numpy as np# 生成随机样本(包含训练数据和测试数据)def generate_rand_samples(dot_num=100):    x_p = np.random.normal(3., 1, dot_num)    y_p = np.random.normal(3., 1, dot_num)    y = np.zeros(dot_num)    C1 = np.array([x_p, y_p, y]).T    x_n = np.random.normal(7., 1, dot_num)    y_n = np.random.normal(7., 1, dot_num)    y = np.ones(dot_num)    C2 = np.array([x_n, y_n, y]).T    x_n = np.random.normal(3., 1, dot_num)    y_n = np.random.normal(7., 1, dot_num)    y = np.ones(dot_num)*2    C3 = np.array([x_n, y_n, y]).T    x_n = np.random.normal(7, 1, dot_num)    y_n = np.random.normal(3, 1, dot_num)    y = np.ones(dot_num)*3    C4 = np.array([x_n, y_n, y]).T    data_set = np.concatenate((C1, C2, C3, C4), axis=0)    np.random.shuffle(data_set)    return data_set[:,:2].astype(np.float32),data_set[:,2].astype(np.int32)X_train,y_train = generate_rand_samples()y_train[y_train == -1] = 0

设置训练前的前置参数,并初始化分类器

num_inputs = 2  # 输入维度大小num_outputs = 4  # 输出维度大小learning_rate = 0.01  # 学习率num_epochs = 2000 # 训练周期数# 归一化数据 将数据特征减去均值再除以标准差X_train = (X_train - X_train.mean(axis=0)) / X_train.std(axis=0)y_train = y_train.astype(np.compat.long)# 创建model并初始化model = SoftmaxClassifier(num_inputs, num_outputs)criterion = nn.CrossEntropyLoss() # 交叉熵损失optimizer = optim.SGD(model.parameters(), lr=learning_rate)  # SGD优化器

训练:

# 遍历训练周期数for epoch in range(num_epochs):    outputs = model(torch.tensor(X_train))  # 前向传递计算    loss = criterion(outputs,torch.tensor(y_train))  # 计算预测输出和真实标签之间的损失    train_accuracy = model.compute_accuracy(outputs,torch.tensor(y_train))  # 计算模型当前训练周期中准确率    optimizer.zero_grad()  # 清楚优化器中梯度    loss.backward()  # 计算损失对模型参数的梯度    optimizer.step()    # 打印信息    if (epoch + 1) % 10 == 0:        print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}, Accuracy: {train_accuracy:.4f}")

运行:

Epoch [1820/2000], Loss: 0.9947, Accuracy: 0.9575Epoch [1830/2000], Loss: 0.9940, Accuracy: 0.9600Epoch [1840/2000], Loss: 0.9932, Accuracy: 0.9600Epoch [1850/2000], Loss: 0.9925, Accuracy: 0.9600Epoch [1860/2000], Loss: 0.9917, Accuracy: 0.9600....
测试

生成测试并测试:

X_test, y_test = generate_rand_samples()  # 生成测试数据X_test = (X_test- np.mean(X_test)) / np.std(X_test)  # 归一化y_test = y_test.astype(np.compat.long)predicts = model(torch.tensor(X_test))  # 获取模型输出accuracy = model.compute_accuracy(predicts,torch.tensor(y_test))  # 计算准确度print(f"Test Accuracy: {accuracy:.4f}")

输出:

Test Accuracy: 0.9725

绘制图像:

# 绘制图像x_min, x_max = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1y_min, y_max = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))Z = model(torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)).argmax(dim=1).numpy()Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.4)plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, s=20, edgecolor="k")plt.show()
感知机分类器

实现与上述softmax分类器相似,此处实现sigmod感知机,采用sigmod作为分类函数,该函数可以将线性变换的结果映射为0到1之间的实数值,通常被用作神经网络中的激活函数

sigmoid感知机的学习算法与普通的感知机类似,也是采用随机梯度下降(SGD)的方式进行更新。不同之处在于,sigmoid感知机的输出是一个概率值,需要将其转化为类别标签。

通常使用阈值来决定输出值所属的类别,如将输出值大于0.5的样本归为正类,小于等于0.5的样本归为负类。

定义
# 感知机分类器class PerceptronClassifier(nn.Module):    def __init__(self, input_size,output_size):        super(PerceptronClassifier, self).__init__()        self.linear = nn.Linear(input_size,output_size)    def forward(self, x):        logits = self.linear(x)        return torch.sigmoid(logits)    def compute_accuracy(self, pred, target):        pred = torch.where(pred >= 0.5, 1, -1)        accuracy = (pred == target).sum().item() / target.size(0)        return accuracy

给定一个输入向量(x1,x2,x3...xn),输出为y=σ(wx+b)=1/(e^−(wx+b))

训练

生成训练集:

def generate_rand_samples(dot_num=100):    x_p = np.random.normal(3., 1, dot_num)    y_p = np.random.normal(3., 1, dot_num)    y = np.ones(dot_num)    C1 = np.array([x_p, y_p, y]).T    x_n = np.random.normal(6., 1, dot_num)    y_n = np.random.normal(0., 1, dot_num)    y = np.ones(dot_num)*-1    C2 = np.array([x_n, y_n, y]).T    data_set = np.concatenate((C1, C2), axis=0)    np.random.shuffle(data_set)    return data_set[:,:2].astype(np.float32),data_set[:,2].astype(np.int32)X_train,y_train = generate_rand_samples()X_test,y_test = generate_rand_samples()

该过程与上述softmax分类器相似:

num_inputs = 2num_outputs = 1learning_rate = 0.01num_epochs = 200# 归一化数据 将数据特征减去均值再除以标准差X_train = (X_train - X_train.mean(axis=0)) / X_train.std(axis=0)# 创建model并初始化model = PerceptronClassifier(num_inputs, num_outputs)optimizer = optim.SGD(model.parameters(), lr=learning_rate)  # SGD优化器criterion = nn.functional.binary_cross_entropy

训练:

# 遍历训练周期数for epoch in range(num_epochs):    outputs = model(torch.tensor(X_train))    labels = torch.tensor(y_train).unsqueeze(1)    loss = criterion(outputs,labels.float())    train_accuracy = model.compute_accuracy(outputs, labels)    optimizer.zero_grad()    loss.backward()    optimizer.step()    if (epoch + 1) % 10 == 0:        print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}, Accuracy: {train_accuracy:.4f}")

输出:

Epoch [80/200], Loss: -0.5429, Accuracy: 0.9550Epoch [90/200], Loss: -0.6235, Accuracy: 0.9550Epoch [100/200], Loss: -0.7015, Accuracy: 0.9500Epoch [110/200], Loss: -0.7773, Accuracy: 0.9400....
测试
X_test, y_test = generate_rand_samples() # 生成测试集X_test = (X_test - X_test.mean(axis=0)) / X_test.std(axis=0)test_inputs = torch.tensor(X_test)test_labels = torch.tensor(y_test).unsqueeze(1)with torch.no_grad():    outputs = model(test_inputs)    accuracy = model.compute_accuracy(outputs, test_labels)    print(f"Test Accuracy: {accuracy:.4f}")

绘图:

x_min, x_max = X_test[:, 0].min() - 1, X_test[:, 0].max() + 1y_min, y_max = X_test[:, 1].min() - 1, X_test[:, 1].max() + 1xx, yy = torch.meshgrid(torch.linspace(x_min, x_max, 100), torch.linspace(y_min, y_max, 100))# 预测每个点的类别Z = torch.argmax(model(torch.cat((xx.reshape(-1,1), yy.reshape(-1,1)), 1)), 1)Z = Z.reshape(xx.shape)# 绘制分类图plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral,alpha=0.0)# 绘制分界线w = model.linear.weight.detach().numpy()  # 权重b = model.linear.bias.detach().numpy()  # 偏置x1 = np.linspace(x_min, x_max, 100)x2 = (-b - w[0][0]*x1) / w[0][1]plt.plot(x1, x2, "k-")# 绘制样本点plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=plt.cm.Spectral)plt.show()
上一篇: 下一篇:
x
推荐阅读

今日热搜:Pytorch实现分类器

2023-04-17

北京隆福大厦所持有鸿运置业50万股权四次挂牌 起拍价降至220万元-世界速看

2023-04-17

湖北一知名“网红”竟是“网逃”,落网后仍惦记直播赚钱还债 世界热文

2023-04-17

焦作市城乡一体化示范区(高新区)国土空间规划委员会2023年第一次会议召开_焦点资讯

2023-04-17

2023世界新能源汽车大会将于9月在德国慕尼黑举办-焦点快看

2023-04-17

镇江日报社大楼一楼门面房装修启事_世界实时

2023-04-17

4死28伤!美国阿拉巴马州16岁女孩生日派对响起致命枪声 环球速读

2023-04-17

三部门:广交会展期内销售的进口展品享税收优惠

2023-04-17

天天热点评!抓紧报名!山西成人高招“专升本”再次征集志愿

2023-04-17

国乒遇考验!2位00后PK日本,钱天一进死亡之组,林诗栋恐一轮游-世界看点

2023-04-17

云南省高级人民法院网上诉讼平台_云南省高级人民法院网-环球关注

2023-04-17

儿童眼睛散光的原因 散光是什么原因引起的

2023-04-16

跟队记者:维尼修斯和克罗斯恢复团队训练,身体没有问题|今日观点

2023-04-16

肯塔基双子星合砍70分!这场胜利国王等了17年 焦点热讯

2023-04-16

风控专员岗位职责_风控专员是做什么的

2023-04-16

全球短讯!止痒偏方视频 止痒偏方

2023-04-16

新能源电池退役处理与利用产业高峰论坛在京召开 科力远等企业代表参与论坛

2023-04-16

盐城(南京)科创资源对接会举行,探索实践“孵化在高地,转化在盐城”新模式 全球看热讯

2023-04-16

筑牢反诈防火墙,守护群众钱袋子!宝山这里开展法治专题讲座-焦点速递

2023-04-16

焦点讯息:花瓣浏览器怎么设置默认 华为浏览器恢复默认设置步骤

2023-04-16

扭胯_扭-当前简讯

2023-04-16

黄梅戏女驸马简谱杨俊_黄梅戏女驸马简谱

2023-04-16

这就是信心|喜——“朋友圈”越来越广|最资讯

2023-04-15

普陀曹杨新村街道开展国家安全教育日活动_每日资讯

2023-04-15

中国电信青海黄南分公司开展4.15全民国家安全教育日宣传活动-环球即时

2023-04-15

巴花大板价格多少_巴花大板价格

2023-04-15

2023同上一堂课思政大课主题

2023-04-15

2023年4月15日三甲胺价格最新行情预测-世界看热讯

2023-04-15

马力刺客|电车魔王 千匹特斯拉Model S Plaid轮上功率实测

2023-04-15

玩收藏:掉进这些“坑”的人最多,赶紧看看

2023-04-15

爱上语文王崧舟第一集_爱上语文

2023-04-15

县农业农村局开展“4·15”全民安全教育日生物安全宣传-当前观点

2023-04-15

焦点热文:现场直击 | 朝阳区副区长舒毕磊到左家庄街道开展“一码共治”专题调研

2023-04-15

志丹交警:文明交通伴“童”行

2023-04-15

国富创新(00290)建议更新现有一般授权_每日消息

2023-04-14

全球速看:雷人什么意思呢_雷人什么意思

2023-04-14

热门看点:新能源汽车景气度跟踪:M4W1订单趋缓 进入新车发布周期 需求改善在即

2023-04-14

【聚看点】湖畔青青绿头鸭,竟然是你吃的“北京烤鸭”的祖宗

2023-04-14

新课标I卷高考满分作文:致老陈的一封信(二) 江苏高考满分作 全球通讯

2023-04-14

股市三点钟|科创50指数大涨3.28% 半导体板块爆发

2023-04-14

两秒将想象变成现实 “商汤秒画”打造AI画图“模型超市”|世界观天下

2023-04-14

Wyloo Metals, IGO在西澳大利亚州获得了首个集成电池材料工厂的土地-观焦点

2023-04-14

今亮点!背背佳广告青春美少女 背背佳广告

2023-04-14

北京2.45亿平方米存量建筑需更新 片区化推进已成趋势|当前关注

2023-04-14

支撑国土空间规划业务时手机信令数据等要“去实名化”处理

2023-04-14

消息!《守望先锋2》新英雄操作不流畅 开发者正在研究替代方案

2023-04-14

当前观点:珠海鸿钧异质结新型高效太阳能电池项目奠基

2023-04-14

远景集团高级副总裁田庆军:储能“内卷”是伪命题

2023-04-14

兰博基尼LB744:混动超级跑车新标杆-世界热点评

2023-04-14

“自主五虎”逆势而上,东风寄望转型破局

2023-04-14

文明战略什么时候出 公测上线时间预告

2023-04-14

天天热点评!漯河市气象台发布大雾橙色预警【Ⅱ级/严重】【2023-04-14】

2023-04-14

微动态丨俞敏洪:误打误撞进入农业领域,成为中国农产品销售直播最大平台

2023-04-13

QQ邮箱“关联邮箱帐号”功能将下线

2023-04-13

观热点:汪文斌:日本在军事扩张的道路上越走越远 国际社会应对此保持高度警惕

2023-04-13

拉线塔拆除施工方案(拉线塔)

2023-04-13

天天热资讯!C视频:AI助力!让体育课变聪明

2023-04-13

大宗交易:泰坦科技成交694.8万元,折价9.95%(04-13)

2023-04-13

私募证券基金一季度平均收益率为3.91% 逾七成实现正收益|全球聚看点

2023-04-13

延庆八达岭镇举办招商引资推介会 着力构建企业服务生态系统 热文

2023-04-13

简历上写QQ邮箱会掉分吗引热议 网友:邮箱也分三六九等?

2023-04-13

怎么把石榴壳完整保留? 通讯

2023-04-13

黑石宣布完成史上最大房地产基金BREPX 募资金额达304亿美元_今日报

2023-04-13

世界短讯!快讯丨文旅部:组织开展2023年文旅消费促进活动

2023-04-13

如何快速利用蓝牙 AoA 和 AoD 进行室内物流追踪

2023-04-13

世界最资讯丨(体育)乒乓球——WTT新乡冠军赛:孙颖莎晋级八强

2023-04-13

中老铁路首趟国际旅客列车发车

2023-04-13

31省份3月CPI出炉:四川涨幅独升 吉林为0_焦点日报

2023-04-13

李弘毅歌曲_李弘毅照片-信息

2023-04-13

继续战?琼斯发博:明年我会做得更好 相信我!

2023-04-13

房产信息:隆德办公室扩展的立面上穿孔的六角形金属板 全球热文

2023-04-12

英国首相办公室:苏纳克和美国总统拜登都表示,他们真诚希望北爱尔兰的机构能够尽快恢复 世界微速讯

2023-04-12

浮尘缓解、气温回升!13日夜间到14日江苏有雷雨天气

2023-04-12

Shokz韶音发布新一代旗舰款OpenFit舒适圈

2023-04-12

《佐贺偶像是传奇》UnionCreative官方合作贩售系列上新

2023-04-12

2023年4月12日1,2-辛二醇价格最新行情预测

2023-04-12

全球要闻:我在抖音看见拼多多广告说可以在拼多多开店于是2022年4月2

2023-04-12

光大银行长沙分行召开“服务实体,优汇助企”推介会 助力实体经济高质量发展

2023-04-12

天天热议:宁官汪险参攻推迅速退铁生字组词

2023-04-12

【天天速看料】中国一批应对气候变化南南合作项目援助物资将于近期起运

2023-04-12

甘肃省首架洲际货运包机顺利起航

2023-04-12

环球今日报丨眼镜的污点怎么去除

2023-04-12

驱蚊子最有效的东西 怎么驱蚊子有效呢|天天快看

2023-04-12

武冈掀起全民国防教育热潮 实现村(社区)及行业领域国防教育阵地全覆盖

2023-04-12

全球新消息丨美腾科技等6只科创板股融资余额增幅超20%

2023-04-12

全球速读:减持近半!巴菲特连续10次抛售比亚迪 3月车企销量回暖 拐点将至?

2023-04-12

新动态:“大众品”市场逐渐升温,白酒企业集体拓展下沉市场

2023-04-12

世界银行行长:预计今年中国GDP增速超5%

2023-04-12

【天天热闻】梦想从今天开始

2023-04-12

“实事惠民生 实干兴陇原”——2022年甘肃省资助困难家庭学生6099名 发放资助金5643.4万元-天天新要闻

2023-04-11

40岁男士生日礼物送什么好

2023-04-11

最新数据显示,在过去两年消费者需求和库存担忧推动全球商业活动之后,今年第一季度美国集装箱进口同比下降近23%,回到疫情爆发前的水平

2023-04-11

广西崇左:边境线上的装维“红色娘子军”_热讯

2023-04-11

黑龙江邀请湖北游客体验避暑游:欢迎移步20℃“空调房” 微头条

2023-04-11

苏炳添起诉网易,近一年已状告多家企业违规使用肖像权

2023-04-11

前沿消息报道:国王VS勇士票价G1最低493美元 勇士官方本赛季球队共扣篮372次为社区基金募款74万美元 世界快资讯

2023-04-11

全球观速讯丨款款都是旗舰 vivo官宣折叠系列及平板旗舰新品发布会定档4月20日

2023-04-11

视焦点讯!​光禄镇党委书记唐云——发展鲜花经济助推文旅农旅融合发展

2023-04-11

早盘三大指数小幅回落 北上资金半天抢筹逾27亿元 机构称短期或低位板块补涨为主|环球时快讯

2023-04-11

韶关退休工资怎么算?-每日快报

2023-04-11