pytorch使用nn.Moudle实现逻辑回归

本文实例为大家分享了pytorch使用nn.Moudle实现逻辑回归的具体代码,供大家参考,具体内容如下

内容

pytorch使用nn.Moudle实现逻辑回归

问题

loss下降不明显

解决方法

#源代码 out的数据接收方式
     if torch.cuda.is_available():
         x_data=Variable(x).cuda()
         y_data=Variable(y).cuda()
     else:
         x_data=Variable(x)
         y_data=Variable(y)
    
    out=logistic_model(x_data)  #根据逻辑回归模型拟合出的y值
    loss=criterion(out.squeeze(),y_data)  #计算损失函数
#源代码 out的数据有拼装数据直接输入
#     if torch.cuda.is_available():
#         x_data=Variable(x).cuda()
#         y_data=Variable(y).cuda()
#     else:
#         x_data=Variable(x)
#         y_data=Variable(y)
    
    out=logistic_model(x_data)  #根据逻辑回归模型拟合出的y值
    loss=criterion(out.squeeze(),y_data)  #计算损失函数
    print_loss=loss.data.item()  #得出损失函数值

源代码

import torch
from torch import nn
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np

#生成数据
sample_nums = 100
mean_value = 1.7
bias = 1
n_data = torch.ones(sample_nums, 2)
x0 = torch.normal(mean_value * n_data, 1) + bias      # 类别0 数据 shape=(100, 2)
y0 = torch.zeros(sample_nums)                         # 类别0 标签 shape=(100, 1)
x1 = torch.normal(-mean_value * n_data, 1) + bias     # 类别1 数据 shape=(100, 2)
y1 = torch.ones(sample_nums)                          # 类别1 标签 shape=(100, 1)
x_data = torch.cat((x0, x1), 0)  #按维数0行拼接
y_data = torch.cat((y0, y1), 0)

#画图
plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='RdYlGn')
plt.show()

# 利用torch.nn实现逻辑回归
class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression, self).__init__()
        self.lr = nn.Linear(2, 1)
        self.sm = nn.Sigmoid()

    def forward(self, x):
        x = self.lr(x)
        x = self.sm(x)
        return x
    
logistic_model = LogisticRegression()
# if torch.cuda.is_available():
#     logistic_model.cuda()

#loss函数和优化
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(logistic_model.parameters(), lr=0.01, momentum=0.9)
#开始训练
#训练10000次
for epoch in range(10000):
#     if torch.cuda.is_available():
#         x_data=Variable(x).cuda()
#         y_data=Variable(y).cuda()
#     else:
#         x_data=Variable(x)
#         y_data=Variable(y)
    
    out=logistic_model(x_data)  #根据逻辑回归模型拟合出的y值
    loss=criterion(out.squeeze(),y_data)  #计算损失函数
    print_loss=loss.data.item()  #得出损失函数值
    #反向传播
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
    
    mask=out.ge(0.5).float()  #以0.5为阈值进行分类
    correct=(mask==y_data).sum().squeeze()  #计算正确预测的样本个数
    acc=correct.item()/x_data.size(0)  #计算精度
    #每隔20轮打印一下当前的误差和精度
    if (epoch+1)%100==0:
        print('*'*10)
        print('epoch {}'.format(epoch+1))  #误差
        print('loss is {:.4f}'.format(print_loss))
        print('acc is {:.4f}'.format(acc))  #精度
        
        
w0, w1 = logistic_model.lr.weight[0]
w0 = float(w0.item())
w1 = float(w1.item())
b = float(logistic_model.lr.bias.item())
plot_x = np.arange(-7, 7, 0.1)
plot_y = (-w0 * plot_x - b) / w1
plt.xlim(-5, 7)
plt.ylim(-7, 7)
plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=logistic_model(x_data)[:,0].cpu().data.numpy(), s=100, lw=0, cmap='RdYlGn')
plt.plot(plot_x, plot_y)
plt.show()

输出结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python代码实现逻辑回归logistic原理

    Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程,为最大化方程,利用牛顿梯度上升求解方程参数. 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 使用数据类型:数值型和标称型数据. 介绍逻辑回归之前,我们先看一问题,有个黑箱,里面有白球和黑球,如何判断它们的比例. 我们从里面抓3个球,2个黑球,1个白球.这时候,有人就直接得出了黑球67%,白球占比33%.这个时候,其实这个人使用了最大似然概率的思想,通俗来讲,

  • PyTorch实现多维度特征输入逻辑回归

    目录 一.实现过程 1.准备数据 2.设计模型 4.训练过程 5.结果展示 二.参考文献 一.实现过程 1.准备数据 本文数据采取文献[1]给出的数据集,该数据集前8列为特征,最后1列为标签(0/1).本模型使用pandas处理该数据集,需要注意的是,原始数据集没有特征名称,需要自己在第一行添加上去,否则,pandas会把第一行的数据当成特征名称处理,从而影响最后的分类效果. 代码如下: # 1.准备数据 import torch import pandas as pd import numpy

  • 基于Pytorch实现逻辑回归

    本文实例为大家分享了Pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下 1.逻辑回归 线性回归表面上看是“回归问题”,实际上处理的问题是“分类”问题,逻辑回归模型是一种广义的回归模型,其与线性回归模型有很多的相似之处,模型的形式也基本相同,唯一不同的地方在于逻辑回归会对y作用一个逻辑函数,将其转化为一种概率的结果.逻辑函数也称为Sigmoid函数,是逻辑回归的核心. 2.基于Pytorch实现逻辑回归 import torch as t import matplotlib.pyplo

  • python实现逻辑回归的方法示例

    本文实现的原理很简单,优化方法是用的梯度下降.后面有测试结果. 先来看看实现的示例代码: # coding=utf-8 from math import exp import matplotlib.pyplot as plt import numpy as np from sklearn.datasets.samples_generator import make_blobs def sigmoid(num): ''' :param num: 待计算的x :return: sigmoid之后的数

  • pytorch实现逻辑回归

    本文实例为大家分享了pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下 一.pytorch实现逻辑回归 逻辑回归是非常经典的分类算法,是用于分类任务,如垃圾分类任务,情感分类任务等都可以使用逻辑回归. 接下来使用逻辑回归模型完成一个二分类任务: # 使用逻辑回归完成一个二分类任务 # 数据准备 import torch import matplotlib.pyplot as plt x1 = torch.randn(365)+1.5 # randn():输出一个形状为size的标准正

  • Pytorch实现逻辑回归分类

    本文实例为大家分享了Pytorch实现逻辑回归分类的具体代码,供大家参考,具体内容如下 1.代码实现 步骤: 1.获得数据2.建立逻辑回归模型3.定义损失函数4.计算损失函数5.求解梯度6.梯度更新7.预测测试集 import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from torch.autograd import Variable import torchvision.da

  • PyTorch线性回归和逻辑回归实战示例

    线性回归实战 使用PyTorch定义线性回归模型一般分以下几步: 1.设计网络架构 2.构建损失函数(loss)和优化器(optimizer) 3.训练(包括前馈(forward).反向传播(backward).更新模型参数(update)) #author:yuquanle #data:2018.2.5 #Study of LinearRegression use PyTorch import torch from torch.autograd import Variable # train

  • python编写Logistic逻辑回归

    用一条直线对数据进行拟合的过程称为回归.逻辑回归分类的思想是:根据现有数据对分类边界线建立回归公式. 公式表示为: 一.梯度上升法 每次迭代所有的数据都参与计算. for 循环次数:         训练 代码如下: import numpy as np import matplotlib.pyplot as plt def loadData(): labelVec = [] dataMat = [] with open('testSet.txt') as f: for line in f.re

  • python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Reduction).分类(Classfication).聚类(Clustering)等方法.当我们面临机器学习问题时,便可根据下图来选择相应的方法. Sklearn具有以下特点: 简单高效的数据挖掘和数据分析工具 让每个人能够在复杂环境中重复使用 建立NumPy.Scipy.MatPlotLib之上 代

  • pytorch使用nn.Moudle实现逻辑回归

    本文实例为大家分享了pytorch使用nn.Moudle实现逻辑回归的具体代码,供大家参考,具体内容如下 内容 pytorch使用nn.Moudle实现逻辑回归 问题 loss下降不明显 解决方法 #源代码 out的数据接收方式      if torch.cuda.is_available():          x_data=Variable(x).cuda()          y_data=Variable(y).cuda()      else:          x_data=Var

  • PyTorch零基础入门之逻辑斯蒂回归

    目录 学习总结 一.sigmoid函数 二.和Linear的区别 三.逻辑斯蒂回归(分类)PyTorch实现 Reference 学习总结 (1)和上一讲的模型训练是类似的,只是在线性模型的基础上加个sigmoid,然后loss函数改为交叉熵BCE函数(当然也可以用其他函数),另外一开始的数据y_data也从数值改为类别0和1(本例为二分类,注意x_data和y_data这里也是矩阵的形式). 一.sigmoid函数 logistic function是一种sigmoid函数(还有其他sigmo

  • PyTorch上搭建简单神经网络实现回归和分类的示例

    本文介绍了PyTorch上搭建简单神经网络实现回归和分类的示例,分享给大家,具体如下: 一.PyTorch入门 1. 安装方法 登录PyTorch官网,http://pytorch.org,可以看到以下界面: 按上图的选项选择后即可得到Linux下conda指令: conda install pytorch torchvision -c soumith 目前PyTorch仅支持MacOS和Linux,暂不支持Windows.安装 PyTorch 会安装两个模块,一个是torch,一个 torch

  • 详解用TensorFlow实现逻辑回归算法

    本文将实现逻辑回归算法,预测低出生体重的概率. # Logistic Regression # 逻辑回归 #---------------------------------- # # This function shows how to use TensorFlow to # solve logistic regression. # y = sigmoid(Ax + b) # # We will use the low birth weight data, specifically: # y

  • tensorflow实现逻辑回归模型

    逻辑回归模型 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测. import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data #下载好的mnist数据集存在F:/mnist/data/中 m

随机推荐