编程实现标准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 = []
for i in data:
if i not in diff_type:
diff_type.append(i)
ret = []
for i in data:
idx = diff_type.index(i)
ret.append([1 if j==idx else 0 for j in rang
机器学习:BP算法实现与比较

本文通过编程实现标准BP(SGD)和累积BP(FullBatch)算法,在西瓜数据集上训练单隐层神经网络。模型在训练集和西瓜3.0上均达到100%准确率,证明了隐层非线性变换增强模型表达力。实验发现,隐层大小至少为2,SGD在未收敛时误差较高但训练时间更短,FullBatch则在相同时间下可能更快达到收敛。
最低0.47元/天 解锁文章
6714

被折叠的 条评论
为什么被折叠?



