Closed hyo009 closed 6 years ago
看上去是数据的问题,能否贴下data_provider,或者data_provider产生的输入数据
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
@guoshengCS
可否将np.array
类型改为float32,另外添加label这里改成这样吧label = int(labels.strip().split(';')[0])
@guoshengCS 改了,还是一样的错误
可否把yield的数据打印贴在这里看一下
@guoshengCS [ 5 608 0 0 0 0 0 0 0 0 3 1 111111 0 3 1 111111 0] 1
train_label[i]
是numpy.int32
类型,需要再用int转一下yield train_input[i], int(train_label[i])
it works.
train_label[i]是numpy.int32类型,需要再用int转一下yield train_input[i], int(train_label[i])
模型:
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 &)