前一篇博客讲述了SGD和Batch方法的代码实现,本篇博客主要是比较SGD和Batch方法的学习速度,通过平均误差来进行比较,为了确保公平,两种方法的权重用相同的值初始化。
在这里附上代码:
#!/usr/bin/env python
import math
import random
import BatchDelta
import SGDdelta
import matplotlib.pyplot as plt
if __name__ == '__main__':
#绘制曲线图
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#设置横纵坐标
ansy = []; ansy1 =[]
ansx = []; ansx1 =[]
# Wij表示输入节点j到输出节点i之间的权值
WS = []
WB = []
# 标准输入
data = [[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]]
# 标准输出
D = [0, 0, 1, 1]
# 初始化权值
for i in range(0, 3):
WS.append(2 * random.random() - 1);
WB.append(WS[i]);
#print("WS:"+WS[i].__str__()+"WB:"+WB[i].__str__());
for i in range(0,1000):
es_sum=eb_sum=0;
WS = SGDdelta.DeltaSGD(WS,data,D);
WB = BatchDelta.Batch(WB,data,D);