我需要为图像分类任务实现一个简单的基于感知器的神经网络,具有二进制输出和单层,但是我遇到了困难。我有几个问题:
我需要使用范围为 [-1, 1] 的 tanh() 激活函数,但是,我的训练标签是 1 和 0。我应该缩放激活函数,还是简单地将 0 标签更改为 -1?
所以梯度下降规则要求我根据规则移动权重:
我对我的错误使用均方误差:
考虑到我的输出是, x 是我的输入向量和是这里对应的标签。
我实现这是python,输入向量与权重的点积结果太大,这使得和,所以我学不会。我该如何规避这个问题?
感谢您的回复。
实施:
def perc_nnet(X, y, iter = 10000, eta=0.0001):
a, b, c = X.shape
W_aug = np.random.normal(0, 0.01, a*b+1)
errors = []
for i in range(iter):
selector = rd.randint(0,c-1)
x_n = X[:,:,selector].ravel() #.append(1) #has the bias as well
x_n = np.append(x_n, 1)
v = x_n.dot(W_aug)
o = np.tanh(v)
y_i = y[:,selector] if y[:,selector]==1 else -1
MSE = 0.5*(o - y_i)**2
errors.append(MSE)
delta = - eta * (o - y_i) * (1 - o**2) * x_n
W_aug = W_aug + delta
return W_aug, errors