Обновлено: преобразовать данные каждой строки в массив (x, 1) - PullRequest
0 голосов
/ 29 июня 2018

Недавно я читал нейронную сеть и углубленное обучение Майкла Нильсена (ссылка) и хотел протестировать нейронную сеть на данных по умолчанию по кредиту. Однако после нескольких попыток мне все еще не удалось преобразовать данные в формате 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 (тестирование и обучение являются переменными, а тестирование2 и обучение2 являются логическими значениями по умолчанию, 0 - без значения по умолчанию и 1 - по умолчанию).

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

В вашем коде есть ошибки:

В комментариях замечено: genfromtxt , эта функция уже выполняет чтение в объекте массива numpy, поэтому на основе вашего import Утверждение, что вы на самом деле не ссылались на модуль, вот более чистый способ чтения данных и изменения их формы. Вот краткая документация для чтения текстовых файлов и изменения их формы: numpy.genfromtxt и numpy.reshape

Вот более «читабельный» способ чтения данных и изменения их формы (я не хочу потеряться в стольких скобках , и его не так легко читать, и нужно быть осторожным с заказами), так что, как вы видите, это правильный способ чтения данных: genfromtxt вам нужно ...

Так что будем «переводить» шаги:

  1. для переменной tr_input : считайте необработанные данные, основанные на файле (10000, 769) , и выполните преобразование, чтобы данные выглядели (769,10000)

  2. для переменной tr_res : прочитайте необработанные данные, основанные на файле (10000,) , и выполните преобразование так, чтобы данные выглядели ( 1, 10000)

  3. для переменной tr_test : прочитайте необработанные данные, основанные на файле (2000, 769) , и выполните преобразование так, чтобы данные выглядели (769, 2000)

  4. для переменной 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))

Также здесь перечислены выходные данные:

tr_test data format and output

test_data and training_data print what is inside

Примечание: если данные имеют имена заголовков / переменных, передайте skip_header = 1, чтобы пропустить первую строку при чтении, а форма данных также изменится на -1.

0 голосов
/ 29 июня 2018

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...