所以我编写了这个python程序,其中一部分是它的行为,就像我想的那样。我哪里错了?任何建议的纠正都是最有责任的。
print(grad2)
print(xorTrainingWeights[1:3] - learningRate * grad2[1:3])
xorTrainingWeights[1:3] = xorTrainingWeights[1:3] - learningRate * grad2[1:3]
print(xorTrainingWeights[1:3])
这里变量的值是:
xorTrainingWeights = np.array([1, 2, 3])
learningRate = 0.01
grad2 = np.dot(xorTrainingExamples.transpose(), delta2) / 4
print语句的输出如下:
第一次迭代:
[ 0.41579347 0.23752538 0.24488529]
[ 1.99762475 2.99755115]
[1 2]
第二次迭代:
[ 0.38661089 0.21570272 0.23364698]
[ 0.99784297 1.99766353]
[0 1]
那么究竟什么是错的。即使我减去grad2
乘以learningRate
时它将是一个小值,但该数字仍然被置于最低整数。
答案 0 :(得分:3)
您的问题是xorTrainingWeights
有dtype=int
,因此重新分配时您的值会被覆盖。
检查一下:
test = np.array([1,2,3])
print(test)
test[1:3] = test[1:3] - 0.001
print(test)
test = np.array([1.,2.,3.])
# or test = np.array([1,2,3], dtype=float)
# or test = test.astype(float)
print(test)
test[1:3] = test[1:3] - 0.001
print(test)
给出:
[1 2 3]
[1 1 2]
[ 1. 2. 3.]
[ 1. 1.999 2.999]