pytorch从dataframe中提取信息,变为可训练的tensor
  TEZNKK3IfmPf 2023年11月14日 31 0

文章目录

  • 提取方法
    • 步骤1.构造dataframe
    • 步骤2. 从dataframe中提取信息
    • 步骤3.转变格式
  • 案例代码

 

要从dataframe格式的数据中提取数据,然后传入到torch的模型中的方法如下:

提取方法

步骤1.构造dataframe

df = pd.DataFrame(create_float((100, 5)))  # 生成50行3列的dataframe
df['label'] = create_float((100, 1))

步骤2. 从dataframe中提取信息

y = df['label'] # label值
x = df.drop(['label'], axis=1)
x_train = torch.from_numpy(x.values)
y_train = torch.from_numpy(y[:, np.newaxis])

注意:如果只有一个预测值,这里y_train要变为ndarry shape = (num,1)的数据,不能是shape=(num,)

步骤3.转变格式

x_train = x_train.float()  # 转为 float32 类型
y_train = y_train.float()

案例代码

下面是一个从dataframe中读取数据然后训练模型的小例子:

import torch
import torch.nn as nn
import numpy as np
import pandas as pd


class LinearRegressionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_dim, output_dim)

    def forward(self, x):
        out = self.linear(x)
        return out


def create_float(shape=(1, 1)):
    return np.array([np.random.random_sample(shape[1]) for i in range(shape[0])])


if __name__ == '__main__':
    df = pd.DataFrame(create_float((100, 5)))  # 生成50行3列的dataframe
    df['label'] = create_float((100, 1))
    # 提取 x与y
    y = df['label']
    x = df.drop(['label'], axis=1)
    # 开始转变
    x_train = torch.from_numpy(x.values)
    y_train = torch.from_numpy(y[:, np.newaxis])
    x_train = x_train.float()  # 转为 float32 类型
    y_train = y_train.float()
    # 指定参数与损失函数
    model = LinearRegressionModel(x.shape[1], 1)
    epochs = 1000
    learning_rate = 0.01
    optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
    criterion = nn.MSELoss()

    for epoch in range(epochs):
        epoch += 1
        # 梯度要清零每一次迭代
        optimizer.zero_grad()
        # 前向传播
        outputs = model(x_train)
        # 计算损失
        loss = criterion(outputs, y_train)
        # 返向传播
        loss.backward()
        # 更新权重参数
        optimizer.step()
        # 每隔50次打印一次
        if epoch % 50 == 0:
            print('epoch {}, loss {}'.format(epoch, loss.item()))
    # 预测:
    predicted = model(x_train)
    print(predicted)
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年03月29日   35   0   0 pytorch
  TEZNKK3IfmPf   2023年11月14日   21   0   0 pytorch
  I7JaHrFMuDsU   24天前   21   0   0 pytorch
  TEZNKK3IfmPf   2023年11月14日   17   0   0 pytorch
  TEZNKK3IfmPf   2023年11月15日   14   0   0 pytorch
TEZNKK3IfmPf