Machine learning 某些迭代后的成本
我正试图用softmax回归解决一个Machine learning 某些迭代后的成本,machine-learning,deep-learning,gradient-descent,backpropagation,softmax,Machine Learning,Deep Learning,Gradient Descent,Backpropagation,Softmax,我正试图用softmax回归解决一个多类分类问题(包含3个标签) 这是我第一次使用梯度下降和反向传播(不使用正则化和任何高级优化算法)粗略实现,只包含1层 此外,当学习率较大(>0.003)时,成本变为NaN,降低学习率时,成本函数工作正常。 谁能解释我做错了什么 #X是(13177)维的 #y为(3177)尺寸,标签为0/1 m=X.形状[1]#177 W=np.random.randn(3,X.shape[0])*0.01#(3,13) b=0 成本=0 alpha=0.0001#对我来说似
多类分类问题(包含3个标签)
这是我第一次使用梯度下降和反向传播(不使用正则化和任何高级优化算法)粗略实现,只包含1层
此外,当学习率较大(>0.003)时,成本变为NaN
,降低学习率时,成本函数工作正常。
谁能解释我做错了什么
#X是(13177)维的
#y为(3177)尺寸,标签为0/1
m=X.形状[1]#177
W=np.random.randn(3,X.shape[0])*0.01#(3,13)
b=0
成本=0
alpha=0.0001#对我来说似乎太小了,但对于更大的价值来说,成本变得很低
对于范围(100)内的i:
Z=np.dot(W,X)+b
t=np.exp(Z)
加法=np.和(t,轴=0)
A=t/add
损失=-np.multiply(y,np.log(A))
成本+=总金额(损失)/m
打印('迭代后的成本',i+1,'is',成本)
dZ=A-y
dW=np.dot(dZ,X.T)/m
db=np.总和(dZ)/m
W=W-α*dW
b=b-α*db
这就是我得到的:
cost after iteration 1 is 6.661713420377916
cost after iteration 2 is 23.58974203186562
cost after iteration 3 is 52.75811642877174
.............................................................
...............*upto 100 iterations*.................
.............................................................
cost after iteration 99 is 1413.555298639879
cost after iteration 100 is 1429.6533630169406
过了一段时间我才明白
首先,由于以下原因,成本增加:
成本+=np.总和(损失)/m
在这里加号是不需要的,因为它将增加所有以前的成本计算在每个时代,这不是我们想要的。在小批量梯度下降过程中,通常需要这种实现来计算每个历元的成本
其次,对于这个问题,学习率太大了,这就是为什么成本超过了最小值,变成了NaN。
我查看了我的代码,发现我的特性的范围非常不同(一个是-1到1,另一个是-5000到5000),这限制了我的算法使用更大的学习率值
所以我应用了特征缩放:
var = np.var(X, axis=1)
X = X/var
现在,学习速度可以大得多(好吧,过了一段时间我就明白了
首先,由于以下原因,成本增加:
成本+=np.总和(损失)/m
这里不需要加号,因为它将添加在每个历元上计算的所有以前的成本,这不是我们想要的。在计算每个历元的成本的小批量梯度下降期间,通常需要此实现
其次,对于这个问题,学习率太大了,这就是为什么成本超过了最小值,变成了NaN。
我查看了我的代码,发现我的特性的范围非常不同(一个是-1到1,另一个是-5000到5000),这限制了我的算法使用更大的学习率值
所以我应用了特征缩放:
var = np.var(X, axis=1)
X = X/var
现在学习率可以大得多(因为你在做cost+=np.sum(loss)/m
应该是cost=np.sum(loss)/m
因为你在做cost+=np.sum(loss)/m
应该是cost=np.sum(loss)/m