当前位置: 首页 > news >正文

day37

作业

import torch

import torch.nn as nn

from torch.utils.data import DataLoader, TensorDataset

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

 

# 1. 加载数据

data = pd.read_csv('data.csv')

 

 

# 2. 数据预处理

# 划分训练集和验证集

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

 

# 特征标准化

scaler = StandardScaler()

X_train = scaler.fit_transform(X_train)

X_val = scaler.transform(X_val)

 

# 转换为PyTorch张量

X_train_tensor = torch.FloatTensor(X_train)

y_train_tensor = torch.FloatTensor(y_train)

X_val_tensor = torch.FloatTensor(X_val)

y_val_tensor = torch.FloatTensor(y_val)

 

# 创建数据集和数据加载器

train_dataset = TensorDataset(X_train_tensor, y_train_tensor)

val_dataset = TensorDataset(X_val_tensor, y_val_tensor)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

val_loader = DataLoader(val_dataset, batch_size=32)

 

# 3. 定义模型

class CreditModel(nn.Module):

    def __init__(self, input_size):

        super(CreditModel, self).__init__()

        self.fc1 = nn.Linear(input_size, 64)

        self.fc2 = nn.Linear(64, 32)

        self.fc3 = nn.Linear(32, 1)

        self.relu = nn.ReLU()

        self.sigmoid = nn.Sigmoid()

        

    def forward(self, x):

        x = self.relu(self.fc1(x))

        x = self.relu(self.fc2(x))

        x = self.sigmoid(self.fc3(x))

        return x

 

# 4. 初始化模型、损失函数和优化器

input_size = X_train.shape[1]  # 特征维度

model = CreditModel(input_size)

criterion = nn.BCELoss()  # 二分类任务,如果是回归任务使用MSELoss

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

 

# 5. 加载预训练权重(如果存在)

try:

    model.load_state_dict(torch.load('credit_model_weights.pth'))

    print("成功加载预训练权重")

except:

    print("未找到预训练权重,从头开始训练")

 

# 6. 训练配置

patience = 10  # 早停耐心值

best_val_loss = float('inf')

counter = 0

additional_epochs = 50  # 继续训练的轮数

 

# 7. 训练循环

for epoch in range(additional_epochs):

    # 训练阶段

    model.train()

    train_loss = 0.0

    for inputs, labels in train_loader:

        optimizer.zero_grad()

        outputs = model(inputs)

        loss = criterion(outputs, labels.unsqueeze(1))

        loss.backward()

        optimizer.step()

        train_loss += loss.item() * inputs.size(0)

    

    # 验证阶段

    model.eval()

    val_loss = 0.0

    with torch.no_grad():

        for inputs, labels in val_loader:

            outputs = model(inputs)

            loss = criterion(outputs, labels.unsqueeze(1))

            val_loss += loss.item() * inputs.size(0)

    

    # 计算平均损失

    train_loss = train_loss / len(train_loader.dataset)

    val_loss = val_loss / len(val_loader.dataset)

    

    print(f'Epoch [{epoch+1}/{additional_epochs}], Train Loss: {train_loss:.4f}, Val Loss: {val_loss:.4f}')

 

    # 早停策略

    if val_loss < best_val_loss:

        best_val_loss = val_loss

        counter = 0

        # 保存最佳模型权重

        torch.save(model.state_dict(), 'best_credit_model_weights.pth')

    else:

        counter += 1

        if counter >= patience:

            print(f'验证损失连续{patience}轮未改善,提前停止训练!')

            break

 

# 8. 保存最终模型权重

torch.save(model.state_dict(), 'credit_model_weights_final.pth')

print("训练完成,模型权重已保存")

 

http://www.lqws.cn/news/461773.html

相关文章:

  • Redis数据结构之GEO
  • ROS1/ROS2中工作空间和工作包创建详解
  • WIFI原因造成ESP8266不断重启的解决办法
  • 创业知识概论
  • 大数据Hadoop集群搭建
  • 第五章 中央处理器
  • tkinter 的 pack() 布局管理器学习指南
  • 《汇编语言:基于X86处理器》第3章 汇编语言基础
  • 一个库,比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 ,请问我是不是查找替换,把所有的kotti字符替换成kotti2就行了?
  • 加密货币:比特币
  • 如何进行IEC61850的一致性测试
  • linux——C程序的编译与调试
  • AR 眼镜之-条形码识别-实现方案
  • 7.3.1二叉排序树
  • 宽度优先遍历(bfs)(4)——解决拓扑排序
  • Python 中布尔值的使用:掌握逻辑判断的核心
  • phpstudy无法启动apache,80端口被占用,完美解决
  • Java常见八股-(6.算法+实施篇)
  • Linux——库文件生成和使用
  • 通过CDH安装Spark的详细指南
  • moments_object_model_3d这么理解
  • 医院预约挂号
  • 分清display三个属性
  • 【Python】List
  • 大数据治理域——计算管理
  • 3DS中文游戏全集下载 任天堂3DS简介3DS第一方独占游戏推荐
  • AI的认知象限:浅谈一下我们与AI的边界
  • c++系列之智能指针的使用
  • uni-app项目实战笔记17--获取系统信息getSystemInfo状态栏和胶囊按钮
  • 【Python进阶系列】第9篇:聊聊 Python 中常用的第三方库