PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.2k stars 5.57k forks source link

NotImplementedError: Wrong number or type of arguments for overloaded function 'IVector_create'. #5664

Closed hyo009 closed 6 years ago

hyo009 commented 6 years ago

模型:

x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(18)) y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Softmax()) y = paddle.layer.data(name="y", type = paddle.data_type.integer_value(3)) cost = paddle.layer.cross_entropy_cost(input=y_predict, label=y)

parameters = paddle.parameters.create(cost) optimizer = paddle.optimizer.Momentum(momentum=0) trainer = paddle.trainer.SGD(cost=cost, parameters=parameters, update_equation=optimizer)

#训练:

feeding = {'x': 0, 'y': 1}

def event_handler(event): if isinstance(event, paddle.event.EndIteration): if event.batch_id % 1 == 0: print "Pass %d, Batch %d, Cost %f" % ( event.pass_id, event.batch_id, event.cost)

trainer.train( reader=paddle.batch(train_reader(), batch_size=10), feeding=feeding, event_handler=event_handler, num_passes=4)

输出错误

I1115 06:21:29.279609 76 Util.cpp:166] commandline: --use_gpu=False [INFO 2017-11-15 06:21:29,286 networks.py:1482] The input order is [x, y] [INFO 2017-11-15 06:21:29,287 networks.py:1488] The output order is [cross_entropy_0] [INFO 2017-11-15 06:21:29,290 networks.py:1482] The input order is [x, y] [INFO 2017-11-15 06:21:29,291 networks.py:1488] The output order is [cross_entropy_0] I1115 06:21:29.292371 76 GradientMachine.cpp:86] Initing parameters.. I1115 06:21:29.292428 76 GradientMachine.cpp:93] Init parameters done. Traceback (most recent call last): File "paddleTry.py", line 81, in num_passes=4) File "/usr/local/lib/python2.7/dist-packages/paddle/v2/trainer.py", line 114, in train feeder(data_batch), out_args, pass_type) File "/usr/local/lib/python2.7/dist-packages/py_paddle/dataprovider_converter.py", line 249, in call return self.convert(dat, argument) File "/usr/local/lib/python2.7/dist-packages/paddle/v2/data_feeder.py", line 134, in convert return DataProviderConverter.convert(self, reorder_data(dat), argument) File "/usr/local/lib/python2.7/dist-packages/py_paddle/dataprovider_converter.py", line 244, in convert scanner.finish_scan(argument) File "/usr/local/lib/python2.7/dist-packages/py_paddle/dataprovider_converter.py", line 178, in finish_scan ids = swig_paddle.IVector.create(self.ids, self.data_in_gpu) File "/usr/local/lib/python2.7/dist-packages/py_paddle/swig_paddle.py", line 881, in create return _swig_paddle.IVector_create(*args) NotImplementedError: Wrong number or type of arguments for overloaded function 'IVector_create'. Possible C/C++ prototypes are: IVector::create(std::vector< int,std::allocator< int > > const &,bool) IVector::create(std::vector< int,std::allocator< int > > const &)

guoshengCS commented 6 years ago

看上去是数据的问题,能否贴下data_provider,或者data_provider产生的输入数据

hyo009 commented 6 years ago

def train_reader(): f = open("./train_data_output.txt",'r') xx = [] yy = [] for line in f: (x_info,labels) = line.strip().split('|') xx.append(x_info.strip().split('\t')) label = [int(labels.strip().split(';')[0])] yy.append(label)

train_input = np.array(xx, dtype = int)
train_label = np.array(yy, dtype = int)

def reader():
    for i in xrange(train_label.shape[0]):
        yield train_input[i], train_label[i]
return reader

./train_data_output.txt 文件格式: 5 0705 0 0 000000 000000 0 0 000000 000000 5 1 111111 000000 5 1 111111 000000|1;1;1;1;1

hyo009 commented 6 years ago

@guoshengCS

2017-11-15 3 23 39
guoshengCS commented 6 years ago

可否将np.array类型改为float32,另外添加label这里改成这样吧label = int(labels.strip().split(';')[0])

hyo009 commented 6 years ago

@guoshengCS 改了,还是一样的错误

guoshengCS commented 6 years ago

可否把yield的数据打印贴在这里看一下

hyo009 commented 6 years ago

@guoshengCS [ 5 608 0 0 0 0 0 0 0 0 3 1 111111 0 3 1 111111 0] 1

guoshengCS commented 6 years ago

train_label[i]numpy.int32类型,需要再用int转一下yield train_input[i], int(train_label[i])

HardSoft2023 commented 6 years ago

it works.

train_label[i]是numpy.int32类型,需要再用int转一下yield train_input[i], int(train_label[i])