最近,我正在阅读Michael Nielsen (link)的神经网络和深度学习,并想测试贷款违约数据上的神经网络。但是,经过多次尝试,我仍然无法通过脚本将csv格式的数据转换为所需的矩阵格式。
csv文件包含769个变量和1个布尔默认项。看起来像这样:
. v1 v2 v3 ... v770;
1. 1 2 3 ... 0;
2. 2 1 2 ... 1;
...
这就是我的导入方式:
import numpy as np
tr_input = [np.reshape(genfromtxt('training.csv', delimiter=','), (769,10000))]
tr_res = np.reshape(genfromtxt('training2.csv', delimiter=','),(1, 10000))
tr_test = [np.reshape(genfromtxt('testing.csv', delimiter=','), (769,2000))]
tr_test2 = np.reshape(genfromtxt('testing2.csv', delimiter=','), (1, 2000))
test_data = list(zip(tr_test, tr_test2))
training_data = list(zip(tr_input, tr_res))
但是它返回
Traceback (most recent call last):
File "<ipython-input-8-de046f78e8ed>", line 3, in <module>
net.SGD(training_data, 30, 300, 3.0, test_data = test_data)
File "/Users/Neal/Documents/Sources/network.py", line 71, in SGD
self.update_mini_batch(mini_batch, eta)
File "/Users/Neal/Documents/Sources/network.py", line 85, in update_mini_batch
delta_nabla_b, delta_nabla_w = self.backprop(x, y)
File "/Users/Neal/Documents/Sources/network.py", line 105, in backprop
z = np.dot(w, activation)+b
ValueError: shapes (30,769) and (10000,) not aligned: 769 (dim 1) != 10000 (dim 0)
已更新:
不知道为什么genfromtxt给出第一个条目NAN,但是pandas可以正常工作。
研究了原始教程数据之后,我想可能需要将每行数据重塑为(769,1)数组,但是我不知道该怎么做。
附有用于下载神经网络和我的数据的链接:
神经网络:https://github.com/MichalDanielDobrzanski/DeepLearningPython35
数据:https://drive.google.com/drive/folders/1bQEqgb1o9kKNyv8_IBPlNRci5cfSYwFL?usp=sharing (测试和训练是变量,而test2和training2是默认信息布尔值,0表示没有默认值,1表示默认值)。
答案 0 :(得分:1)
您可以使用Numpy或Pandas读取此类CSV文件-我更喜欢Pandas:
import pandas as pd
X_train = pd.read_csv(r'D:\download\training.csv', header=None, dtype='float64')
结果:
In [18]: X_train.shape
Out[18]: (10000, 769)
如果要转置,则其形状为:769 x 10000
In [19]: X_train = X_train.T
In [20]: X_train.shape
Out[20]: (769, 10000)
答案 1 :(得分:0)
在您的代码中,您有一些错误:
在注释中发现的一个是 genfromtxt ,此函数已经在numpy数组对象中读取了,因此基于您的 import 语句,您实际上并不是在指模块,这是一种读取数据并进行整形的更简洁的方法。这是用于读取txt文件并重塑的numpy文档:numpy.genfromtxt和numpy.reshape
这是读取数据和重塑的更“可读”的方式(我讨厌迷失于这么多的括号中,而且阅读起来并不那么容易,需要对顺序进行谨慎处理) ,因此如您所见,这是将数据读取为 genfromtxt 的正确方法,您需要...
因此将“翻译”步骤:
表示 tr_input 变量:基于文件(10000,769)读取原始数据,并进行重塑,使数据看起来像< em>(769,10000)
表示 tr_res 变量:基于文件(10000,)读取原始数据,并进行重塑,使数据看起来(1,10000)
表示 tr_test 变量:根据文件(2000,769)读取原始数据,并进行重塑,使数据看起来像< em>(769,2000)
表示 tr_test2 变量:基于文件(2000,)读取原始数据,并执行重塑,使数据看起来(1,2000)
注意:可以看到错误已解决,其中一个正在使用软件包 模块,并且您指出的错误是数据的形状 ...您无法将(2000,)的数组重塑为(769,10000) ... ...您的 testing.csv 是格式为(2000年)
# readable format prefered by me, not a standard.
# https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html
# https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
import numpy as np
tr_input = np.genfromtxt('/Users/sb0709/Desktop/dqn-pytorch/data_loan/training.csv', delimiter=',').reshape(769,10000)
tr_res = np.genfromtxt('/Users/sb0709/Desktop/dqn-pytorch/data_loan/training2.csv', delimiter=',').reshape(1, 10000)
tr_test = np.genfromtxt('/Users/sb0709/Desktop/dqn-pytorch/data_loan/testing.csv', delimiter=',').reshape(769,2000)
tr_test2 = np.genfromtxt('/Users/sb0709/Desktop/dqn-pytorch/data_loan/testing2.csv', delimiter=',').reshape(1, 2000)
# creating the lists
test_data = list(zip(tr_test, tr_test2))
training_data = list(zip(tr_input, tr_res))
也在此处列出了输出:
注意:如果数据具有标题/变量名称,则在读取数据时传递skip_header = 1以跳过第一行,数据形状也将变为-1。