其他分享
首页 > 其他分享> > 我如何将.csv训练数据馈送到mxnet中的卷积神经网络?

我如何将.csv训练数据馈送到mxnet中的卷积神经网络?

作者:互联网

我最近在Windows 10和Python 3.5上安装了具有GPU支持的mxnet(python软件包).我列举了两个例子,它们似乎运行良好.

尽管我已经在R中使用Mxnet,但我习惯于使用scikit-learn风格的机器学习程序包和Python深度学习程序包(如Mxnet)非常陌生.我很难理解如何将.csv训练数据输入模型.

我想向一些简单的CNN提供一些图像.图像为28×28像素,并以展平数组形式存储在.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)

我正在使用这种方法,类似于我在R中使用mxnet的方法(在R上顺便说一句,它工作得很好,但是我不能在R上使用GPU,所以我需要使用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.

谢谢

解决方法:

问题在这一行:

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

在mxnet中,第二维是要素贴图,而第三维和第四维是宽度和高度,因此应为:

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

标签:csv,deep-learning,python,mxnet
来源: https://codeday.me/bug/20191118/2027888.html