首页 > 其他分享 >深度学习-pytorch-nerual network价格预测-004

深度学习-pytorch-nerual network价格预测-004

时间:2024-08-29 19:14:49浏览次数:9  
标签:nerual num network dim torch dataset train 004 input

# 1.导入相关模块
import torch
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import time

from torchsummary import summary


# 2.构建数据集
def create_dataset():
    # 使用pandas读取数据
    data = pd.read_csv('dataset/手机价格预测.csv')
    # 特征值和目标值
    x, y = data.iloc[:, :-1], data.iloc[:, -1]
    # 类型转换:特征值,目标值
    x = x.astype(np.float32)
    y = y.astype(np.int64)
    # 数据集划分
    x_train, x_valid, y_train, y_valid = train_test_split(x, y, train_size=0.8, random_state=88)
    # 构建数据集,转换为pytorch的形式
    train_dataset = TensorDataset(torch.from_numpy(x_train.values), torch.tensor(y_train.values))
    valid_dataset = TensorDataset(torch.from_numpy(x_valid.values), torch.tensor(y_valid.values))
    # 返回结果
    return train_dataset, valid_dataset, x_train.shape[1], len(np.unique(y))


# 3.构建网络模型
class PhonePriceModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(PhonePriceModel, self).__init__()
        # 1. 第一层:输入维度:20,输出维度:128
        self.linear1 = nn.Linear(input_dim, 128)
        # 2. 第二层:输入维度:128,输出维度:256
        self.linear2 = nn.Linear(128, 256)
        # 3. 第三层:输入维度:256,输出维度:4
        self.linear3 = nn.Linear(256, output_dim)

    def forward(self, x):
        # 前向传播过程
        x = torch.relu(self.linear1(x))
        x = torch.relu(self.linear2(x))
        output = self.linear3(x)
        # 获取数据结果
        return output


# 4.模型训练
def train(train_dataset, input_dim, class_num, ):
    # 固定随机数种子
    torch.manual_seed(0)
    # 初始化模型
    model = PhonePriceModel(input_dim, class_num)
    # 损失函数
    criterion = nn.CrossEntropyLoss()
    # 优化方法
    optimizer = optim.SGD(model.parameters(), lr=1e-3)
    # 训练轮数
    num_epoch = 50

    # 遍历每个轮次的数据
    for epoch_idx in range(num_epoch):
        # 初始化数据加载器
        dataloader = DataLoader(train_dataset, shuffle=True, batch_size=8)
        # 训练时间
        start = time.time()
        # 计算损失
        total_loss = 0.0
        total_num = 1
        # 遍历每个batch数据进行处理
        for x, y in dataloader:
            # 将数据送入网络中进行预测
            output = model(x)
            # 计算损失
            loss = criterion(output, y)
            # 梯度归零
            optimizer.zero_grad()
            # 反向传播
            loss.backward()
            # 参数更新
            optimizer.step()
            # 损失计算
            total_num += 1
            total_loss += loss.item()
        # 打印损失变换结果
        print('epoch: %4s loss: %.2f, time: %.2fs' % (epoch_idx + 1, total_loss / total_num, time.time() - start))
    # 模型保存
    torch.save(model.state_dict(), 'model/phone.pth')


def test(valid_dataset, input_dim, class_num):
    # 加载模型和训练好的网络参数
    model = PhonePriceModel(input_dim, class_num)
    model.load_state_dict(torch.load('model/phone.pth'))
    # 构建加载器
    dataloader = DataLoader(valid_dataset, batch_size=8, shuffle=False)
    # 评估测试集
    correct = 0
    # 遍历测试集中的数据
    for x, y in dataloader:
        # 将其送入网络中
        output = model(x)
        # 获取类别结果
        y_pred = torch.argmax(output, dim=1)
        # 获取预测正确的个数
        correct += (y_pred == y).sum()
    # 求预测精度
    print('Acc: %.5f' % (correct.item() / len(valid_dataset)))


if __name__ == '__main__':
    # 1.获取数据
    train_dataset, valid_dataset, input_dim, class_num = create_dataset()
    print("输入特征数:", input_dim)
    print("分类个数:", class_num)

    # 2.模型实例化
    model = PhonePriceModel(input_dim, class_num)
    summary(model, input_size=(input_dim,), batch_size=16)

    # 3.模型训练
    # train(train_dataset, input_dim, class_num)

    # 4.模型预测
    test(valid_dataset, input_dim, class_num)

优化点:

标签:nerual,num,network,dim,torch,dataset,train,004,input
From: https://www.cnblogs.com/cavalier-chen/p/18387433

相关文章

  • DL00489-基于深度学习的金属多轴疲劳寿命预测含数据集
    使用深度学习模型(CNN,LSTM和GRU)结合全连接层预测金属多轴疲劳寿命的代码。它处理数据集,利用高质量的数据来有效地训练和评估模型。主要功能是结合时间序列加载路径和材料力学性能对疲劳寿命进行预测。      ......
  • DCN V2 Improved Deep & Cross Network and Practical Lessons for Web-scale Learnin
    目录概DCN-v2WangR.,ShivannaR.,ChengD.Z.,JainS.,LinD.,HongL.andChiE.D.DCNV2:Improveddeep&crossnetworkandpracticallessonsforweb-scalelearningtoranksystems,2020.概DCN的升级版.DCN-v2DCN-v2的cross/deep的结合方式上有上......
  • 局域网(Local Area Network,简称LAN)
    局域网(LocalAreaNetwork,简称LAN)是指在一个相对较小的范围内(如一个办公室、学校或家庭)内的计算机和其他网络设备通过网络设备(如交换机、路由器等)互相连接起来,共享资源和信息的网络系统。局域网的主要特点如下:范围有限:局域网通常覆盖一个有限的地理范围,如一个建筑物或一个......
  • 004 路由算法与路径选择策略
    引言路径选择是路由器的核心功能,决定了数据包从源头到达目的地的路径。本篇博文将深入探讨各种路由算法和路径选择策略,帮助你理解路由器如何在复杂网络中进行决策。1.路由算法分类静态路由:管理员手动配置,适用于简单、稳定的网络。静态路由具有高稳定性,但不具备自动恢复......
  • Neo-GNNs: Neighborhood Overlap-aware Graph Neural Networks for Link Prediction
    目录概符号说明MotivationNeo-GNN代码Neo-GNNs:Neighborhoodoverlap-awaregraphneuralnetworksforlinkprediction.NeurIPS,2021.概一种计算上相对高效的,同时利用结构信息和特征信息的链接预测模型.符号说明\(\mathcal{G}=(\mathcal{V},\mathcal{E})\),gra......
  • P1087 [NOIP2004 普及组] FBI 树
    大家好!下面为大家讲解我做了两年半的题目,[NOIP2004普及组]FBI树题目描述我们可以把由0和1组成的字符串分为三类:全0串称为B串,全1串称为I串,既含0又含1的串则称为F串。FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为......
  • 004.MinIO-DirectPV分布式存储部署
    MinIO部署介绍部署概述Kuberneteshostpath、local和本地静态配置都存在需要事先在node节点准备好可用的块存储或文件系统,例如对插入的硬盘,或者磁盘阵列做分区格式化,文件系统则需提前创建好Kubernetes即将利用的挂载目录,并且两种方法都会有亲和性限制,无法做到让Kubernetes自身的......
  • Kolmogorov-Arnold Networks——高效、可解释的神经网络的新前沿
    引言神经网络一直处于人工智能发展的前沿,从自然语言处理和计算机视觉到战略游戏、医疗保健、编码、艺术甚至自动驾驶汽车,无所不包。然而,随着这些模型的规模和复杂性不断扩大,它们的局限性正成为重大缺陷。对大量数据和计算能力的需求不仅使它们成本高昂,而且还引发了可持续......
  • ASP: Response 对象 错误 'ASP 0251 : 80004005' 解决办法
    ASP:Response对象错误'ASP0251:80004005'解决办法 Response对象错误'ASP0251:80004005'超过响应缓冲区限制 这种情况一般是因为需要输出的网页内容太大了,由于asp在输入内容到客户的浏览器上之前,会把需要输出的全部内容先输出到缓存区,这个缓存区一般默认大小......
  • Win11系统提示找不到NetworkStatus.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个NetworkStatus.dll文件(挑选合适的版本文件)......