没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
13页
线性回归 和 非线性回归 的输出都是连续的。逻辑回归 与 线性回归/非线性回归 区别在于 逻辑回归 的输出是 二元离散 的,即输出特征只有两种结果。逻辑回归是二元分类,属于多元分类的一种特殊情况。多元分类与二元分类类似,区别在于使用 softmax 函数替代 sigmoid 函数作为激活函数。如果分类的类别数为 n,则 softmax 函数接收 n 个输入,然后输出 n 个概率(概率之和为 1),概率最大的类别就是预测的类别。
资源推荐
资源详情
资源评论
https://blog.csdn.net/xietansheng/article/details/131711757?spm=1001.2014.3001.5501
1/13
PyTorch
实
现
逻辑
回
归
、
多
元分
类
谢
TS
于
2023-07-13 21:11:43
发
布
原
⽂
链
接
:
https://xiets.blog.csdn.net/article/details/131711757
版
权
声
明
:
原
创
⽂
章禁
⽌
转载
专
栏
⽬
录
:
PyTorch
专
栏
(
总
⽬
录
)
PyTorch
相
关
⽹
站
:
PyTorch
官
⽹
:
https://pytorch.org/
PyTorch API
:
https://pytorch.org/docs/stable/torch.html
1.
逻辑
回
归
线
性
回
归
和
⾮
线
性
回
归
的
输
出
都
是
连
续
的
。
逻辑
回
归
与
线
性
回
归
/
⾮
线
性
回
归
区
别
在
于
逻辑
回
归
的
输
出
是
⼆
元
离
散
的
,
即
输
出
特
征
只
有
两
种
结
果
。
因
此
逻辑
回
归
通
常
⽤
于⼆
元分
类
问题
,
即
把
⼀
堆
样本
分
为
两
类
。
为了
⽅
便
数
学
表
达
和
计
算
,⼀
般
把
逻辑
回
归
分
类
的
两
类
输
出
结
果
分别
记
做
整数
0
和
1
。
1.1
逻辑
回
归
的
激
活
函
数
和
损
失
函
数
逻辑
回
归
的
输
出
是
两
种
类
别
,
记
作
0
和
1
,
可
以
⽤
普
通
⽹络
层
组
合
⼀个
激
活
函
数
,
让
每
个
样本
输
出
两个
0.0 ~ 1.0
之
间
的
值
分别
表
示
两
种
类
别
的
概
率
(
概
率
之
和
为
1
),
概
率
⼤
的
就
作为
样本
的
预
测
类
别
。
sigmoid()
表
示
S
型
函
数
,
公
式
为
sigmoid(x) = 1 / (1 + e^-x)
,
函
数
值
域
为
(0, 1)
,
即
将
⼀
组
变
量
映
射
到
0.0 ~ 1.0
之
间
的
⼀个
数
值
(⼀
组
变
量
对
应
的
输
出
的
和
等
于
1
)
。
sigmoid()
函
数
常
⽤
于⼆
分
类
问题
。
分
类
问题
的
损
失
函
数
⼀
般
使
⽤
CrossEntropyLoss(input, target)
交
叉
熵
损
失
函
数
,
函
数
的
input
参
数
⼀
般
是
⼆
维
矩
阵
,
每
⼀
⾏表
示
预
测
样本
对
应
的
各
类
别
的
概
率
值
,
target
参
数
是样本
的真
实
类
别
值
(
形
状
必
须
是
0D
或
1D
)
。
1.2
逻辑
回
归
示
例
随
机
⽣
成
⼀
堆
不
同
类
别
的
坐
标
点
作为
数据
样本
,
每
个
样本有
两个
输
⼊
特
征
(
X/Y
坐
标
点
)
和
两个
输
出
类
别
标
签
(
0
或
1
),
使
⽤
PyTorch
实
现
逻辑
回
归
示
例
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
1
2
PyTorch
深
度
学
习
/…
专
栏
收
录
该
内
容
9
篇
⽂
章
1000
订
阅
内
容
来
源
:
csdn.net
作
者
昵
称
:
谢
TS
原
⽂
链
接
:
https://xiets.blog.csdn.net/article/details/131711757
作
者
主
⻚
:
https://xiets.blog.csdn.net
https://blog.csdn.net/xietansheng/article/details/131711757?spm=1001.2014.3001.5501
2/13
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch import nn, optim
class LogisticRegression(nn.Module):
"""
逻辑
回
归
神
经⽹络
模
型
"""
def __init__(self, *, in_features: int, out_features: int):
super().__init__()
#
只
使
⽤
⼀
层
线
型
模
型
self.linear = nn.Linear(in_features, out_features)
def forward(self, inputs: torch.Tensor) -> torch.Tensor:
"""
前
向
传
播
(
预
测
输
出
)
"""
#
经
过
线
型
模
型
前
向
传
播
x = self.linear(inputs)
#
线
型
模
型
的
输
出
应
⽤
激
活
函
数
,
输
出
张
量
的
形
状
为
(inputs.shape[0], out_features),
是
⼀个
⼆
维
矩
阵
,
#
每
⼀
⾏表
示
⼀个
样本
的
输
出
,
每
个
样本
输
出
out_features
个
值
在
(0.0, 1.0)
之
间
的
参
数
,
分别
表
示
out_features
个
标
签
类
别
对
应
的
概
率
。
outputs = torch.sigmoid(x)
return outputs
def main():
#
#
⽣
成
样本
#
#
样本
总
数
的
⼀
半
half_samples = 100
#
每
个
样本有
2
个
输
⼊
特
征
, cluster
的
形
状
为
(100, 2)
cluster = torch.ones((half_samples, 2))
#
⽣
成
具
有
指
定
均
值
和
标
准
差
的
⼀
组
数据
(
批
量
样本
的
输
⼊
特
征
), data0
的
形
状
为
(100, 2),
表
示
100
个
⼆
维
坐
标
点
(100
个
样本
的
输
⼊
特
征
)
data0 = torch.normal(-4 * cluster, 3)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
内
容
来
源
:
csdn.net
作
者
昵
称
:
谢
TS
原
⽂
链
接
:
https://xiets.blog.csdn.net/article/details/131711757
作
者
主
⻚
:
https://xiets.blog.csdn.net
https://blog.csdn.net/xietansheng/article/details/131711757?spm=1001.2014.3001.5501
3/13
# data0
样本
批
数据
对
应
的
输
出
标
签
类
别
为
0, label0
的
形
状
为
(100, 1),
表
示
100
个
样本
的
输
出
标
签
类
别
label0 = torch.zeros((half_samples, 1))
#
同
样
的
⽅
法
⽣
成
第
⼆
批
样本
,
该
批
样本是
输
出
标
签
类
别
为
1
data1 = torch.normal(4 * cluster, 3)
label1 = torch.ones((half_samples, 1))
#
合
并
两
批
样本
,
合
并
后
inputs
的
形
状
为
(200, 2), targets
的
形
状
为
(200, 1),
#
表
示
有
200
个
样本
,
每
个
样本有
2
个
输
⼊
特
征
, 1
个
输
出
特
征
(0/1
标
签
类
别
)
inputs = torch.cat((data0, data1), dim=0).type(torch.FloatTensor)
targets = torch.cat((label0, label1), dim=0).type(torch.LongTensor)
#
#
绘
制
样本
#
#
把
样本
数据
绘
制
为
散
点
图
x = inputs.data.numpy()[:, 0] #
第
1
个
输
⼊
特
征
作为
X
轴
,
形
状
为
(200,)
y = inputs.data.numpy()[:, 1] #
第
2
个
输
⼊
特
征
作为
Y
轴
,
形
状
为
(200,)
labels = targets.data.numpy()[:, 0] #
输
出
标
签
类
别
,
形
状
为
(200,)
#
绘
制
散
点
图
,
在
(x, y)
坐
标
处
绘
制
圆
点
,
样本
坐
标
对
应
的
标
签
类
别
⽤
颜
⾊
来
体
现
。
# s=16
表
示
圆
点
的
⼤
⼩
的
2
次
⽅
(s = point_size ** 2)
# c=labels
表
示
圆
点
颜
⾊
值
,
这
⾥
把
标
签
类
别
(0/1)
传
给
c (
也
可
以使
⽤
固
定
的
RGB
值
)
# cmap="bwr"
颜
⾊
值
映
射
,
颜
⾊
值
c
这
⾥
传
的
是标
签
类
别
值
, cmap
负责
把
c (
标
签
类
别
值
)
映
射
为
具
体
的
RGB
颜
⾊
值
,
这
⾥
0
映
射
为
蓝
⾊
, 1
映
射
为
红
⾊
plt.scatter(x, y, s=16, c=labels, cmap="bwr")
# cmap
可取
值
参
考
: https://matplotlib.org/2.0.2/examples/color/colormaps_reference.html
#
#
创
建
/
训
练⽹络
模
型
#
#
创
建
神
经⽹络
模
型
,
样本
输
⼊
特
征
数
为
2,
输
出
特
征
数
为
2 (
因
为
样本有
2
个
输
出
标
签
类
别
,
每
个
标
签
类
别
输
出
为
⼀个
概
率
,
所
以
输
出
特
征
数
为
2)
model = LogisticRegression(in_features=2, out_features=2)
#
创
建
优
化
器
,
使
⽤
随
机
梯
度
下
降
法
,
学
习
率
为
0.02
optimizer = optim.SGD(model.parameters(), lr=0.03)
#
创
建
损
失
函
数
,
分
类
问题
⼀
般
使
⽤
交
叉
熵
损
失
函
数
criterion = nn.CrossEntropyLoss()
#
总
的
迭
代
次
数
epochs = 100
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
内
容
来
源
:
csdn.net
作
者
昵
称
:
谢
TS
原
⽂
链
接
:
https://xiets.blog.csdn.net/article/details/131711757
作
者
主
⻚
:
https://xiets.blog.csdn.net
剩余12页未读,继续阅读
资源评论
谢TS
- 粉丝: 1w+
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功