在实施人工神经网络时,如何减少训练值中的误差?

时间:2016-06-30 21:18:56

标签: python machine-learning neural-network

问题是我在训练值中得到的误差几乎为0.8-1.0,这是不可接受的。我如何找到减少错误的方法?我尝试过降低培训率但是没有用。我目前正在使用Excel工作表中的数据集来训练我的系统。 以下是我使用的示例数据集的链接: http://www.mediafire.com/download/j9o676nvqr32fnb/dataset1.xlsx 以下是我使用的代码:

import numpy as np
import xlrd
def nonlin(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))
addr="/home/shashwat08/pycodes/ann/dataset1.xlsx"
wb=xlrd.open_workbook(addr)
sheet=wb.sheet_by_index(0)

output=[[sheet.cell_value(r,1) for r in range(sheet.nrows)]]  #output array
mv=[[sheet.cell_value(r,0) for r in range(sheet.nrows)]]    #input array

output=np.array(output)
mv=np.array(mv)

op=output.ravel()
ip=mv.ravel()

np.random.seed(1)

syn0=2*np.random.random((1,4))-1
syn1=2*np.random.random((4,1))-1

for i in range(sheet.nrows):
    for j in xrange(100000):
        l0=ip[i]
        l1=nonlin(np.dot(l0,syn0))
        l2=nonlin(np.dot(l1,syn1))

        l2_err=op[i]-l2

        if(j%10000)==0:
            print("Error "+ str(np.mean(np.abs(l2_err))))
        l2_delta=l2_err*nonlin(l2,deriv=True)               #delta value
        l1_err=l2_delta.dot(syn1.T)
        l1_delta=l1_err*nonlin(l1,deriv=True)

        #syn1=syn1+l1.T.dot(l2_delta)
        #syn0=syn0+l0.T.dot(l1_delta)
        L1=l1.T
        L0=l0.T

        syn1=syn1+0.2*L1*l2_delta
        syn0=syn0+0.2*L0*l1_delta

print("Trained values\n")
print l2

我们将不胜感激。谢谢。 :)

1 个答案:

答案 0 :(得分:0)

人工神经网络接受一组超参数,这些超参数决定了您的测试数据集的分类准确性,因为您的神经网络已经在训练数据集上进行了训练。

这些超参数是:

<强> 1。学习率(最常用符号alpha表示)

<强> 2。时期数量(一个时期是通过至少迭代一次训练数据集来训练权重和偏差)。

第3。迷你批量大小(如果您使用随机梯度下降方法和训练后向传播,那么小批量的大小在决定神经网络分类的准确性方面起着巨大的作用)。

<强> 4。训练数据集注释的准确性。

我并不认为你已经包含了人工神经网络的实施。如果您对此领域比较陌生,可以查看this存储库中的人工神经网络。

人工神经网络已经从头开始实施声音事件检测和分类问题。