编程实现标准BP算法(sgd)和累积BP算法(fullbatch),在西瓜3.0上训练一个单隐层网络,并进行比较。
需要先把字符串转成数字,这里用one-hot。把二分类问题看成多分类问题的特例,然后用softmax。最终模型在训练集上可达到100%准确率,并且在西瓜3.0@上也可以达到100%,与前面的逻辑回归相比,多了一个隐层的非线性变换,模型的表达能力确实强大了很多!
经试验,隐层大小至少为2,为1时很难训练到百分之百准确率,隐层较大时,模型收敛更快。sgd和fullbatch相比,当模型还未收敛时,用同样的epoch,sgd比fullbatch误差高,但sgd时间更短。不过用同样的时间训练,sgd可能更容易达到收敛状态。
代码如下:
# coding: utf-8
import pandas as pd
from pandas import read_csv
import theano
import theano.tensor as T
import numpy as np
from theano.tensor.nnet import sigmoid, softmax, binary_crossentropy
import numpy.random as rng
import time
import random
def one_hot_encoder(data):
diff_type = []