2016-07-17 10 views
2

Недавно я установил mxnet (пакет python) с поддержкой GPU в Windows 10 и Python 3.5. Я просматриваю пару примеров, и они, похоже, работают нормально.Как я могу передавать данные обучения .csv в сверточную нейронную сеть в mxnet?

Я привык к учебным пакетам для обучения стик-стике и очень новым для Python пакетам глубокого обучения, таким как Mxnet, хотя я уже использовал Mxnet в R. Мне сложно понять, как кормить данные обучения .csv к модели.

Я хотел бы подать на простой CNN несколько изображений. Изображения 28x28 пикселей и сохраняются как сплющенные массивы в .csv. У меня есть два CSV-файла, один для обучения, а другой для тестирования. Каждый файл .csv имеет следующую структуру:

label, pixel1, pixel2, ..., pixel784 
0,... 
1,... 

Есть 10 этикетки в целом и около 1000/300 изображений в обучающем наборе/тестового набора.

Я использую следующий код для загрузки данных и обучения модели:

import mxnet as mx 
import pandas as pd 
import numpy as np 
import os 

path = "C://users//me//data" 
os.chdir(path) 

df_train = pd.read_csv("train_28.csv") 
df_test = pd.read_csv("test_28.csv") 

keys = ['pixel.'+str(i) for i in range(1,785)] 

X_train = df_train[keys].get_values().T 
X_train = X_train.reshape((1200,28,28,1)) 
y_train = df_train['label'].get_values().reshape((1200,1)) 
#y_train = y_train.reshape((28,28,1,1200)) 



data = mx.symbol.Variable('data') 

# First conv layer 
conv1 = mx.symbol.Convolution(data=data, kernel=(5,5), num_filter=20) 
tanh1 = mx.symbol.Activation(data=conv1, act_type="tanh") 
pool1 = mx.symbol.Pooling(data=tanh1, pool_type="max", 
           kernel=(2,2), stride=(2,2)) 

# Second conv layer 
conv2 = mx.symbol.Convolution(data=pool1, kernel=(5,5), num_filter=50) 
tanh2 = mx.symbol.Activation(data=conv2, act_type="tanh") 
pool2 = mx.symbol.Pooling(data=tanh2, pool_type="max", 
           kernel=(2,2), stride=(2,2)) 

# First fully connected 
flatten = mx.symbol.Flatten(data=pool2) 
fc1 = mx.symbol.FullyConnected(data=flatten, num_hidden=500) 
tanh3 = mx.symbol.Activation(data=fc1, act_type="tanh") 
# second fullc 
fc2 = mx.symbol.FullyConnected(data=tanh3, num_hidden=10) 
# loss 
lenet = mx.symbol.SoftmaxOutput(data=fc2, name='softmax')        

device = mx.gpu()        

model = mx.model.FeedForward.create(lenet, 
            X = X_train, 
            y = y_train, 
            ctx = device, 
            num_epoch = 30) 

Я использую этот подход, который похож на тот, который я использовал с mxnet в R, (кстати на R IT работает отлично, однако я не могу использовать GPU на R, поэтому мне нужно использовать Python для лучших спектаклей ...), однако я получаю следующее сообщение об ошибке:

[16:54:11] D:\chhong\mxnet\dmlc-core\include\dmlc/logging.h:235: [16:54:11] d:\chhong\mxnet\src\operator\./convolution-inl.h:347: Check failed: ksize_x <= dshape[3] && ksize_y <= dshape[2] kernel size exceed input 
Traceback (most recent call last): 
    File "C:\Users\Me\Desktop\esempio_lenet.py", line 57, in <module> 
    num_epoch = 30) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\model.py", line 901, in create 
    eval_batch_end_callback=eval_batch_end_callback) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\model.py", line 745, in fit 
    self._init_params(dict(data.provide_data+data.provide_label)) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\model.py", line 485, in _init_params 
    arg_shapes, _, aux_shapes = self.symbol.infer_shape(**input_shapes) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\symbol.py", line 453, in infer_shape 
    return self._infer_shape_impl(False, *args, **kwargs) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\symbol.py", line 513, in _infer_shape_impl 
    ctypes.byref(complete))) 
    File "C:\Users\Me\Anaconda3\lib\site-packages\mxnet-0.7.0-py3.5.egg\mxnet\base.py", line 77, in check_call 
    raise MXNetError(py_str(_LIB.MXGetLastError())) 
mxnet.base.MXNetError: InferShape Error in convolution0: [16:54:11] d:\chhong\mxnet\src\operator\./convolution-inl.h:347: Check failed: ksize_x <= dshape[3] && ksize_y <= dshape[2] kernel size exceed input 

И я не могу понять, что я делаю неправильно. Может ли кто-нибудь сказать мне, что это за ошибка, и предоставить мне четкий набор инструкций о том, как загружать файлы .csv с той же структурой, что и выше, и обучать модель mxnet? Я взглянул на документацию, но сам не смог понять, как правильно загружать файлы .csv.

Причина, по которой я прошу о процедуре загрузки таких CSV-файлов, заключается в том, что я в основном разбираюсь с данных в этом формате, и для меня было бы очень полезно иметь возможность запускать скрипт с папкой с этими CSV-файлами и готовить их для обучения глубокой сверточной нейронной сети.

Набор обучающих и тестовых .csv-файлов доступен here, если вам понадобится их для воспроизведения кода примера, который я написал.

Спасибо Вам

ответ

3

Проблемы в этой строке:

X_train = X_train.reshape((1200,28,28,1)) 

В mxnet втором измерении является карты функций, в то время как третий и четвертый размеры ширины и высоты, поэтому она должна быть:

X_train = X_train.reshape((1200,1,28,28)) 
+1

Спасибо, что исправил проблему, с которой я столкнулся. Однако я все еще сталкивался с другими проблемами с MXnet и решил перейти на tenorflow с Python, так как я нашел свою документацию гораздо более прямолинейной по сравнению с MXnet. Сказав это, если вы или кто-либо другой могли бы предложить какой-либо учебник или ресурс, который мог бы немного освежить MXnet, я был бы рад прочитать. – mickkk

Смежные вопросы