keras中的目标函数和优化函数
2016-05-05 15:27
375 查看
目标函数就是我们常说的损失函数,优化函数就是我们常说的反调参数的函数,包括:梯度下降函数、随机梯度下降函数等。
这些我相信大家都很清楚了,下面我就简单的介绍一下keras提供的常见的目标函数和优化函数,本人能力有限,平时用到的酒多说几句,用不到的就把名字写出来,欢迎大家补充和指正。
目标函数:
keras文档: http://keras.io/objectives/
mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()
mean_absolute_error / mae 绝对值均差,公式为(|y_pred-y_true|).mean()
mean_absolute_percentage_error / mape公式为:(|(y_true - y_pred) / clip((|y_true|),epsilon, infinite)|).mean(axis=-1)
* 100,和mae的区别就是,累加的是(预测值与实际值的差)除以(剔除不介于epsilon和infinite之间的实际值),然后求均值。
mean_squared_logarithmic_error / msle公式为: (log(clip(y_pred, epsilon, infinite)+1)- log(clip(y_true, epsilon,infinite)+1.))^2.mean(axis=-1),这个就是加入了log对数,剔除不介于epsilon和infinite之间的预测值与实际值之后,然后取对数,作差,平方,累加求均值。
squared_hinge 公式为:(max(1-y_true*y_pred,0))^2.mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的平方的累加均值。
hinge 公式为:(max(1-y_true*y_pred,0)).mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的的累加均值。
binary_crossentropy: 常说的逻辑回归, 就是常用的交叉熵函数
categorical_crossentropy: 多分类的逻辑, 交叉熵函数的一种变形吧,没看太明白
详细请参照theano的官方文档,http://deeplearning.net/software/theano/library/tensor/nnet/nnet.html#tensor.nnet.categorical_crossentropy
优化函数:
keras文档:
下面是一个自定义的优化器的一个demo:
上面好多名词都不明白什么意思,应该把实现的源码贴出来大家看一下
这篇文章写的已经很好了: http://blog.csdn.net/luo123n/article/details/48239963
时间紧迫,以后在学习
这些我相信大家都很清楚了,下面我就简单的介绍一下keras提供的常见的目标函数和优化函数,本人能力有限,平时用到的酒多说几句,用不到的就把名字写出来,欢迎大家补充和指正。
目标函数:
keras文档: http://keras.io/objectives/
mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()
mean_absolute_error / mae 绝对值均差,公式为(|y_pred-y_true|).mean()
mean_absolute_percentage_error / mape公式为:(|(y_true - y_pred) / clip((|y_true|),epsilon, infinite)|).mean(axis=-1)
* 100,和mae的区别就是,累加的是(预测值与实际值的差)除以(剔除不介于epsilon和infinite之间的实际值),然后求均值。
mean_squared_logarithmic_error / msle公式为: (log(clip(y_pred, epsilon, infinite)+1)- log(clip(y_true, epsilon,infinite)+1.))^2.mean(axis=-1),这个就是加入了log对数,剔除不介于epsilon和infinite之间的预测值与实际值之后,然后取对数,作差,平方,累加求均值。
squared_hinge 公式为:(max(1-y_true*y_pred,0))^2.mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的平方的累加均值。
hinge 公式为:(max(1-y_true*y_pred,0)).mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的的累加均值。
binary_crossentropy: 常说的逻辑回归, 就是常用的交叉熵函数
categorical_crossentropy: 多分类的逻辑, 交叉熵函数的一种变形吧,没看太明白
详细请参照theano的官方文档,http://deeplearning.net/software/theano/library/tensor/nnet/nnet.html#tensor.nnet.categorical_crossentropy
优化函数:
keras文档:
下面是一个自定义的优化器的一个demo:
model = Sequential() model.add(Dense(64, init='uniform', input_dim=10)) model.add(Activation('tanh')) model.add(Activation('softmax')) sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)下面是默认的SGD优化器的使用和参数介绍:
model.compile(loss='mean_squared_error', optimizer='sgd')
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) Stochastic gradient descent, with support for momentum, learning rate decay, and Nesterov momentum. <span style="color:#ff0000;">随机梯度下降算法, 看到这个名字是不是很熟了</span> Arguments lr: float >= 0. Learning rate. momentum: float >= 0. Parameter updates momentum.(<span class="s1" style="font-family: Arial, Helvetica, sans-serif;">参数更新的动量, 我也不知道啥意思</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span> decay: float >= 0. Learning rate decay over each update.(学习率衰减量,具体是每次都衰减) nesterov: boolean. Whether to apply Nesterov momentum.(是否启用nesterov动量)
上面好多名词都不明白什么意思,应该把实现的源码贴出来大家看一下
class SGD(Optimizer): '''Stochastic gradient descent, with support for momentum, learning rate decay, and Nesterov momentum. # Arguments lr: float >= 0. Learning rate. momentum: float >= 0. Parameter updates momentum. decay: float >= 0. Learning rate decay over each update. nesterov: boolean. Whether to apply Nesterov momentum. ''' def __init__(self, lr=0.01, momentum=0., decay=0., nesterov=False, *args, **kwargs): super(SGD, self).__init__(**kwargs) self.__dict__.update(locals()) self.iterations = K.variable(0.) self.lr = K.variable(lr) self.momentum = K.variable(momentum) self.decay = K.variable(decay) def get_updates(self, params, constraints, loss): grads = self.get_gradients(loss, params) lr = self.lr * (1. / (1. + self.decay * self.iterations)) self.updates = [(self.iterations, self.iterations + 1.)] # momentum self.weights = [K.variable(np.zeros(K.get_value(p).shape)) for p in params] for p, g, m in zip(params, grads, self.weights): v = self.momentum * m - lr * g # velocity self.updates.append((m, v)) if self.nesterov: new_p = p + self.momentum * v - lr * g else: new_p = p + v # apply constraints if p in constraints: c = constraints[p] new_p = c(new_p) self.updates.append((p, new_p)) return self.updates def get_config(self): return {"name": self.__class__.__name__, "lr": float(K.get_value(self.lr)), "momentum": float(K.get_value(self.momentum)), "decay": float(K.get_value(self.decay)), "nesterov": self.nesterov}源码就不解释了,接着说优化函数,上面以最常用的随机 梯度下降法(sgd)说了怎么用,下面再说说其他的。
这篇文章写的已经很好了: http://blog.csdn.net/luo123n/article/details/48239963
时间紧迫,以后在学习
相关文章推荐
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- 好好努力写博客
- awk 如果日期为20160427,则第二列字段相加
- 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3
- [疯狂Java]I/O:NIO简介、Buffer
- Java并发编程:Thread类的使用
- MySQL 使用笔记
- c++第五次作业
- 培养孩子独立性
- java网络基本类使用(一)
- android中listview点击监听器onItemClick四个参数的含义
- iOS之Xcode修改应用图标
- 部署shop++,启动eclipse遇到内存溢出。
- ios 使用exosip库连接问题
- ISO7816-3 T=1
- 部署shop++,启动eclipse遇到内存溢出。
- 部署shop++,启动eclipse遇到内存溢出。
- 触发器入门知识
- 部署shop++,启动eclipse遇到内存溢出。
- 谈谈程序设计语言、编译器和开发环境之间的关系