如何解决ANN:我无法使用梯度下降
我正在尝试使用梯度下降来训练我的多输入(100 个特征)多输出(3 个输出)模型,但损失函数不会趋向于 0。
损失函数如下图: loss(y_true,y_pred)。这个损失函数奖励大值数据的分类(如果你得到正确的符号)。
这是我的损失函数的代码:
def my_loss_fn(y_true,y_pred) :
d = tf.raw_ops.Sum(input = tf.raw_ops.Abs(x= y_true,name = None),axis = -1,keep_dims = False,name = None)
n = tf.raw_ops.Sum(input = tf.raw_ops.Sign(x = y_true*y_pred,name = None)*tf.raw_ops.Abs(x = y_true,name = None)
return 1-n/d
我使用 tf.raw_ops
是因为 sign()
和 abs()
似乎可微(奇怪..):https://www.tensorflow.org/api_docs/python/tf/raw_ops .
我实现了这个损失函数来训练以下模型(ANN 有 3 层,每层有 50 个节点):
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout
classifier = Sequential()
#Layers
classifier.add(Dense(units = 50,input_shape = (100,),activation = "relu"))
classifier.add(Dropout(0.2))
classifier.add(Dense(units = 50,activation = "relu"))
classifier.add(Dropout(0.2))
# Output layer
classifier.add(Dense(units=3,activation = 'tanh'))
# Compilation
classifier.compile(optimizer = 'adam',loss = my_loss_fn)
#Training
nb_epochs = 300
history = classifier.fit(X_train,y_train,epochs = nb_epochs,batch_size = 128,verbose = True)
损失不会趋向于零,而是在 0.99 和 1.05 之间变化。
我使用的是 tensorflow 1.14.0。
你能帮我解决这个问题吗?
先谢谢大家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。