目标函数就是我们常说的损失函数,优化函数就是我们常说的反调参数的函数,包括:梯度下降函数、随机梯度下降函数等。

这些我相信大家都很清楚了,下面我就简单的介绍一下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>
Argumentslr: 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.# Argumentslr: 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.)]# momentumself.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  # velocityself.updates.append((m, v))if self.nesterov:new_p = p + self.momentum * v - lr * gelse:new_p = p + v# apply constraintsif p in constraints:c = constraints[p]new_p = c(new_p)self.updates.append((p, new_p))return self.updatesdef 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
时间紧迫,以后在学习

keras中的目标函数和优化函数相关推荐

  1. keras中的回调函数

    keras训练 fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, v ...

  2. keras中的mini-batch gradient descent (转)

    深度学习的优化算法,说白了就是梯度下降.每次的参数更新有两种方式. 一. 第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度.这种方法每更新一次参数都要把数据集里的所有样本都看 ...

  3. 【随感】在Keras中如何按最大似然(Max Likewood)训练模型

    在Keras中如何按最大似然(Max Likewood)训练模型 按照生成模型的思路,模型的参数是和数据分布无关的,利用极大似然准则就可以训练模型.但是在类似Keras这种神经网络库中,如何训练类似如 ...

  4. 深度学习布料交换:在Keras中实现条件类比GAN

    2017年10月26日SHAOANLU 条件类比GAN:交换人物形象的时尚文章(链接) 给定三个输入图像:人穿着布A,独立布A和独立布B,条件类比GAN(CAGAN)生成穿着布B的人类图像.参见下图. ...

  5. CNN在Keras中的实践|机器学习你会遇到的“坑”

    2018-12-16 23:43:37 本文作为上一节<卷积之上的新操作>的补充篇,将会关注一些读者关心的问题,和一些已经提到但并未解决的问题: 到底该如何理解padding中的valid ...

  6. 神经网络在Keras中不work!博士小哥证明何恺明的初始化方法堪比“CNN还魂丹”...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 南巴黎电信学院(Télécom SudParis)的在读博士生Nathan Hubens在训练CNN时遇到点难题. 使用在CIFAR10数据 ...

  7. Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

    Keras中提供了一个神经网络可视化的函数plot,并可以将可视化结果保存在本地.plot使用方法如下: from keras.utils.visualize_util import plot plo ...

  8. Keras之ML~P:基于Keras中建立的回归预测的神经网络模型(根据200个数据样本预测新的5+1个样本)——回归预测

    Keras之ML~P:基于Keras中建立的回归预测的神经网络模型(根据200个数据样本预测新的5+1个样本)--回归预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: u ...

  9. Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测

    Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)--概率预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ...

最新文章

  1. 补psp进度(11月4号-9号)
  2. Python2/3 list set性能测试
  3. 意想不到的JavaScript(每日一题1)
  4. JMeter 保持sessionId
  5. Overleaf v2 评测
  6. linux 普通io实现pwm,用普通IO口做PWM输出 - 51单片机 - 电子工程世界-论坛 - 手机版...
  7. android bitmap大小计算,android 之Bitmap 内存大小计算
  8. python画xy轴折线在拐点处加汉字_解决python中画图时x,y轴名称出现中文乱码的问题...
  9. oracle11g导出空表
  10. 配置tfs2017的agent
  11. 计算机应用 格式,《计算机应用》投稿格式.pdf
  12. webots自学笔记(七)通过定义顶点构件3D形状(IndexedFaceSet节点)
  13. ES6深入浅出_汇总贴
  14. 新手必看:PS钢笔抠图教程
  15. Sitemap和网站地图在线生成工具
  16. mysql asc_mysql – 在字符串列上使用asc和desc的索引
  17. Selenium面试问题及答案30题版
  18. Zerotier+Microsoft远程桌面 实现内网穿透搭建异地局域网内远程连接控制桌面
  19. edge打开pdf不显示印章_win10 Edge浏览器打不开pdf文件的解决方法
  20. CF140C New Year Snowmen(贪心+优先队列)

热门文章

  1. Mysql时间函数用法
  2. Riemann积分和Lebesgue积分角度下一积分不等式的等号成立充要条件的研究
  3. 老男孩python2020年31期学习记录贴
  4. dos2unix 安装
  5. 软件测试方法和测试策略
  6. Java-toArray()方法
  7. matlab曲线拟合 函数 用法以及例子
  8. 微信专属输入法你有了吗?防窃听、护隐私
  9. stm32hal库应用笔记之 硬件I2C读写ZD24C64
  10. 串级PID的一些理解