Ich habe vor kurzem mxnet (Python-Paket) mit GPU-Unterstützung auf Windows 10 und Python 3.5 installiert. Ich gehe ein paar Beispiele durch und sie scheinen gut zu funktionieren.Wie kann ich .csv Trainingsdaten in ein konvolutionelles neuronales Netzwerk in mxnet einspeisen?
Ich bin gewohnt zu scikit-lernen Stil Maschine Lernpakete und sehr neu zu Python Deep Learning-Pakete wie Mxnet, obwohl ich bereits Mxnet in R verwendet habe. Ich habe eine harte Zeit zu verstehen, wie .csv Trainingsdaten zu füttern zum Modell.
Ich möchte zu einem einfachen CNN einige Bilder füttern. Die Bilder sind 28 x 28 Pixel groß und in einer .csv-Datei als abgeflachte Arrays gespeichert. Ich habe zwei .csv-Dateien, eine für das Training und die andere für das Testen. Jede CSV-Datei hat die folgende Struktur:
label, pixel1, pixel2, ..., pixel784
0,...
1,...
Es gibt 10 Etiketten insgesamt und um 1000/300 Bilder im Trainingssatz/Test-Set.
ich den folgenden Code verwenden die Daten zu laden und trainieren, das Modell:
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)
ich diesen Ansatz verwenden das die ähnlich ist, ich mit MxNet in R mit wurde, (btw auf R es funktioniert perfekt, ich kann aber nicht die GPU auf R verwenden, so muss ich Python für bessere Leistungen verwenden, ...) aber ich folgende Störung erhalte:
[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
Und ich kann nicht herausfinden, was ich falsch mache. Könnte mir bitte jemand sagen, worum es sich bei diesem Fehler handelt und mir eine klare Anleitung geben, wie man .csv-Dateien mit der gleichen Struktur wie oben lädt und ein mxnet-Modell trainiert? Ich habe mir die Dokumentation angeschaut, konnte aber nicht selbst herausfinden, wie CSV-Dateien korrekt geladen werden ...
Der Grund, warum ich nach einem Verfahren zum Laden solcher .csv-Dateien frage, ist, dass ich mich hauptsächlich damit beschäftige Daten in diesem Format und es wäre sehr wertvoll für mich, ein Skript gegen einen Ordner mit diesen .csv-Dateien laufen zu lassen und sie für das Training eines tiefen konvolutionellen neuralen Netzwerks bereit zu haben.
Eine Reihe von Zug und Test .csv-Dateien sind here verfügbar, sollten Sie sie benötigen, um den Beispielcode zu reproduzieren, den ich geschrieben habe.
Danke
Vielen Dank, dass das Problem behoben, das ich konfrontiert war. Allerdings stieß ich immer noch auf andere Probleme mit MXnet und entschied mich, mit Python zu Tensorflow zu wechseln, da ich seine Dokumentation im Vergleich zu MXnet viel einfacher finde. Wenn Sie oder jemand anderes ein Tutorial oder eine Ressource vorschlagen könnte, die MXnet ein bisschen mehr Licht bringen könnte, würde ich mich freuen, sie zu lesen. – mickkk