|

楼主 |
发表于 2024-12-12 16:29:14
|
显示全部楼层
那我采用softmax函数时,以下内容还应如何修改才是正确的
def sigmoid(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=0)
# return math.tanh(x)
# derivative of our sigmoid function, in terms of the output (i.e. y)
def dsigmoid(y):
s = y.reshape(-1, 1)
return np.diagflat(s) - np.dot(s, s.T)
# return (1.0 - y**2)
def update(self, targets, rate, factor):
if len(targets) != self.no:
raise ValueError('wrong number of target values')
# calculate error terms for output
output_deltas = [dsigmoid(ao) * (target - ao) for target, ao in zip(targets, self.ao)]
# calculate error terms for hidden
hidden_deltas = [dsigmoid(ah) * error for ah, error in zip(self.ah, self.olayer.get_error(output_deltas))]
# update output weights
self.olayer.update(output_deltas, rate, factor)
# update input weights
self.hlayer.update(hidden_deltas, rate, factor)
# calculate error
return sum([0.5 * (t-o)**2 for t, o in zip(targets, self.ao)])
|
|