Python 从csv馈送火炬对象以进行学习

Python 从csv馈送火炬对象以进行学习,python,csv,pytorch,torch,Python,Csv,Pytorch,Torch,我试图给PyTorch提供输入,以构建一个非常简单的神经网络。我的问题是: 我有我想要在csv中使用的所有数据,我正在使用Panda来读取这些数据。 这是我的密码: data = pd.read_csv("../myFile.csv") input = [x for x in data] input = np.asarray(input) input = torch.from_numpy(input) 这将返回错误: line 42, in <module> input = tor

我试图给PyTorch提供输入,以构建一个非常简单的神经网络。我的问题是: 我有我想要在csv中使用的所有数据,我正在使用Panda来读取这些数据。 这是我的密码:

data = pd.read_csv("../myFile.csv")
input = [x for x in data]
input = np.asarray(input)
input = torch.from_numpy(input)
这将返回错误:

line 42, in <module>
input = torch.from_numpy(input)
TypeError: can't convert np.ndarray of type numpy.str_. The only supported types are: float64, float32, float16, int64, int32, int16, int8, and uint8.
但我仍然得到以下错误:

line 52, in <module>
    inp = np.asarray(inp, dtype=np.float32)
  File "C:\Users\Paul\anaconda3\lib\site-packages\numpy\core\numeric.py", line 538, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: could not convert string to float: '01139_Lichtenau'

编码失败是因为某种原因吗?

这里的错误非常明显,数组中有一些字符串无法转换为张量。你可以把所有的数值变量转换成张量,但是你必须对字符串做些什么。你可以删除所有包含字符串的列(不是最优的),对你的类别进行一次热编码,或者我建议在将其输入前馈神经网络之前嵌入你的类别


Fastai(一个构建在pytorch之上的库)有一个
表格
部分,可以帮助您更轻松地构建您的网络,您可能需要检查一下:(它将为您执行分类变量的嵌入和一些预处理)

这里的错误非常明显,数组中有一些字符串无法转换为张量。你可以把所有的数值变量转换成张量,但是你必须对字符串做些什么。你可以删除所有包含字符串的列(不是最优的),对你的类别进行一次热编码,或者我建议在将其输入前馈神经网络之前嵌入你的类别


Fastai(一个构建在pytorch之上的库)有一个
表格
部分,可以帮助您更轻松地构建您的网络,您可能需要检查一下:(它将为您执行分类变量的嵌入和一些预处理)

您是否检查了
[x代表数据中的x]
的输出?这只是列名称的列表,类型为string。这就是为什么,你得到了以上的错误。现在,我将使用示例
csv
文件帮助您解决问题

文件名:
data.csv

custID name age salary label
EMP1 Mahi 23 120000 Yes
EMP2 Tom 28 200000 No
EMP3 Chris 25 123000 No
EMP4 Matt 29 2130000 Yes
EMP5 Brown 27 324675 Yes
如您所见,上面的文件包含字符串和整数值。首先,我将显示代码的输出:

data = pd.read_csv('data.csv', sep=' ')
inp = [x for x in data]   # ['custID', 'name', 'age', 'salary', 'label']
inp = np.asarray(inp)     # array(['custID', 'name', 'age', 'salary', 'label'], dtype='<U6')
inp = torch.from_numpy(inp)
输出:

tensor([[     23.,      28.,      25.,      29.,      27.],
        [ 120000.,  200000.,  123000., 2130000.,  324675.],
        [      0.,       1.,       1.,       0.,       0.],
        [      1.,       0.,       0.,       1.,       1.]])
在上面的代码中,我首先对列
label
进行了热编码,然后删除了该列并加入了编码数据。之后,我阅读了
csv
文件的所有列(包括
custID
name
),然后忽略
custID
name
列,并将其他列转换为float,最后使用
torch.from_numpy
将其转换为tensor


在上述输出中,每一行对应于一个热编码数据中的一列。

您是否检查了
[x代表x在数据中]
的输出?这只是列名称的列表,类型为string。这就是为什么,你得到了以上的错误。现在,我将使用示例
csv
文件帮助您解决问题

文件名:
data.csv

custID name age salary label
EMP1 Mahi 23 120000 Yes
EMP2 Tom 28 200000 No
EMP3 Chris 25 123000 No
EMP4 Matt 29 2130000 Yes
EMP5 Brown 27 324675 Yes
如您所见,上面的文件包含字符串和整数值。首先,我将显示代码的输出:

data = pd.read_csv('data.csv', sep=' ')
inp = [x for x in data]   # ['custID', 'name', 'age', 'salary', 'label']
inp = np.asarray(inp)     # array(['custID', 'name', 'age', 'salary', 'label'], dtype='<U6')
inp = torch.from_numpy(inp)
输出:

tensor([[     23.,      28.,      25.,      29.,      27.],
        [ 120000.,  200000.,  123000., 2130000.,  324675.],
        [      0.,       1.,       1.,       0.,       0.],
        [      1.,       0.,       0.,       1.,       1.]])
在上面的代码中,我首先对列
label
进行了热编码,然后删除了该列并加入了编码数据。之后,我阅读了
csv
文件的所有列(包括
custID
name
),然后忽略
custID
name
列,并将其他列转换为float,最后使用
torch.from_numpy
将其转换为tensor


在上面的输出中,每一行对应于一个热编码数据中的一列。

这看起来很有希望,但我仍然很难将这些片段组合在一起。有人有一些我可以使用的示例代码吗?它看起来很有希望,但我仍然很难将这些代码组合起来。有人有我可以使用的示例代码吗?请查看我的编辑,我在评论部分没有足够的空间,谢谢你迄今为止的努力@不,在这个循环中,对于列表中的列(数据):,您正在对所有列进行一次热编码,其中还包括已经是整数或浮点的列。这就是你想要的吗?不是真的,那只是为了测试目的,让事情开始运行,看看它是否有效。这会导致问题吗?你能提供一些你现在正在使用的样本数据吗?请查看我的编辑,我在评论部分没有足够的空间,谢谢你迄今为止的努力@不,在这个循环中,对于列表中的列(数据):,您正在对所有列进行一次热编码,其中还包括已经是整数或浮点的列。这就是你想要的吗?不是真的,那只是为了测试目的,让事情开始运行,看看它是否有效。这会导致问题吗?你能提供一些你现在正在使用的样本数据吗?