softmax分类器训练报错
Created by: calm736
写了一个softmax用于对数据进行分类训练,一直报错,辛苦大佬们帮忙看看问题在哪儿 代码:
coding=utf-8
import numpy as np import cPickle import sys import json import paddle.v2 as paddle
生成train_reader
def trainReader(trainFilePath): def reader(): with open(trainFilePath,'r') as f: lines = [line.strip() for line in f] for line in lines: item = line.strip().split('\t')#一条数据 yield [np.array(item[1:12]).astype('float32'), np.array(item[12]).astype('float32')] # yield item[1:12], item[12] # yield [item[1],item[2],item[3],item[4],item[5],item[6],item[7],item[8],item[9],item[10],item[11]], item[12] # yield [np.array(item[1:12]).astype('float32'),np.array(item[-1:]).astype('float32')] return reader
生成test_reader
def testReader(testFilePath): def reader(): with open(testFilePath,'r') as f: lines = [line.strip() for line in f] for line in lines: item = line.strip().split('\t')#一条数据 yield np.array(item[1:12]).astype('float32') # yield [item[1:12]] # yield [np.array(item[1:12]).astype('float32'),np.array(item[-1:]).astype('float32')] return reader
def event_handler(event): global step global estep 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) if isinstance(event, paddle.event.EndPass): estep += 1 if (estep == 9): with open('scnnparams_pass_%d.tar' % 128, 'w') as f: parameters.to_tar(f)
定义网络结构
def convolutional_neural_network_org(input): # 第一层卷积层 conv_pool_1 = paddle.networks.simple_img_conv_pool( input=input, filter_size=5, num_filters=20, num_channel=1, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 第二层卷积层 conv_pool_2 = paddle.networks.simple_img_conv_pool( input=conv_pool_1, filter_size=5, num_filters=50, num_channel=20, pool_size=2, pool_stride=2, act=paddle.activation.Relu()) # 全连接层 predict = paddle.layer.fc( input=conv_pool_2, size=2, act=paddle.activation.Softmax()) return predict
paddle.init(use_gpu=False, trainer_count=1)
#需要从文件读取训练数据 train_reader = trainReader( trainFilePath = "/root/lilinke/code/python/demo/data/new_cutepet_train_minmax.txt") #需要从文件中读取测试数据 test_reader = testReader( testFilePath = "/root/lilinke/code/python/demo/data/new_cutepet_test_minmax.txt")
for x,y in train_reader(): print(x) print(y)
x = paddle.layer.data( name='x', type=paddle.data_type.dense_vector(11))
predict = paddle.layer.fc( input=x, size=2, act=paddle.activation.Softmax())
y = paddle.layer.data( name='y', type=paddle.data_type.integer_value(2))
cost = paddle.layer.classification_cost( input=predict, label=y)
parameters = paddle.parameters.create(cost) optimizer = paddle.optimizer.Momentum( learning_rate=0.1 / 128.0, momentum=0.9, regularization=paddle.optimizer.L2Regularization(rate=0.0005 * 128)) trainer = paddle.trainer.SGD(cost=cost, parameters=parameters, update_equation=optimizer)
feeding = {'x': 0, 'y': 1}
trainer.train( reader=paddle.batch(train_reader, batch_size=100), feeding=feeding, event_handler=event_handler, num_passes=10)
'''对数据进行预测''' waitJudgeData = [] for test_x in test_reader: waitJudgeData.append(test_x)
probs = paddle.infer(output_layer=predict, parameters=parameters, input=waitJudgeData) print probs
第2列到11列都是x的特征,12列是标签