当前位置:   article > 正文

pytorch从dataframe中提取信息,变为可训练的tensor_pd.dataframe 构建 torch.floattensor

pd.dataframe 构建 torch.floattensor

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

提取方法

步骤1.构造dataframe

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

步骤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])
  • 1
  • 2
  • 3
  • 4

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

步骤3.转变格式

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

案例代码

下面是一个从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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号