Hold_C 2020-09-26 14:41 采纳率: 20%
浏览 408

PyTorch---感知机 损失函数计算的数值一直没变化

问题描述:
在训练过程中,损失函数的值一直没有变化,这是为啥啊?恳请大佬指点一下问题出在哪儿

图片说明

# pyTorch ---> 感知机
# 激活函数为 sign函数
import torch
import pandas
from torch import nn, optim
from torch.autograd import Variable

def get_data(path):       # 将 csv 中的 每一条数据,放进一个列表中 -->每个列表为一个样本点  , y单独 放进一个列表中
    data_x1 = pandas.read_csv(path)['x1']  # 特征 x1
    data_x2 = pandas.read_csv(path)['x2']  # 特征 x2
    target = pandas.read_csv(path)['y']    # 所属分类
    target = list(target)
    data_train = []
    for i in range(len(target)):
        if target[i] == 0:
            target[i] = -1
    for i in range(len(data_x1)):
        temp_data = []
        temp_data.append(data_x1[i])
        temp_data.append(data_x2[i])
        data_train.append(temp_data)
    return data_train, target

def trans_list_variable(data_train, target):    # list 转成 Tensor 再转成 Variable
    # 列表转成Tensor
    data_train = torch.Tensor(data_train)
    target = [target]
    target = torch.Tensor(target)
    target =target.T
    # Tensor 转成 Variable
    data_train = Variable(data_train, requires_grad=True)
    target = Variable(target, requires_grad=True)
    return data_train, target

class LineRegression(nn.Module):
    def __init__(self):
        super(LineRegression, self).__init__()
        self.linear_function = nn.Linear(2, 1)
    def forward(self, data_train):
        result = []
        for i in data_train:
           out = self.linear_function(i)
           out = torch.sign(out)
           result.append(out)

        # 将列表转换成 Variable
        result = [result]
        result = torch.Tensor(result)
        result = result.T
        result = Variable(result)

        return result

def train(data_train, target):
    model = LineRegression()
    loss_Model = nn.MSELoss()
    optimizer = optim.SGD(model.parameters(), lr=0.1)

    epoch = 40000
    for i in range(epoch):  # 训练40000次

        result = model(data_train)            
        loss_function = loss_Model(result, target)
        optimizer.zero_grad()
        loss_function.backward()
        optimizer.step()

        if (i+1) % 200 == 0:
            out = loss_function.item()
            print(out)

if __name__ == '__main__':
    path = r'C:\Users\sel\Desktop\ML_data.csv'
    data_train, target = get_data(path)  # 获得数据
    data_train, target = trans_list_variable(data_train, target)
    train(data_train, target)
  • 写回答

2条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测