Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有某种方法可以实现随机梯度下降而不是从头开始_Python_Optimization_Machine Learning_Tensorflow_Deep Learning - Fatal编程技术网

Python 是否有某种方法可以实现随机梯度下降而不是从头开始

Python 是否有某种方法可以实现随机梯度下降而不是从头开始,python,optimization,machine-learning,tensorflow,deep-learning,Python,Optimization,Machine Learning,Tensorflow,Deep Learning,对于一个标准的机器学习问题,例如MNIST上的图像分类,损失函数是固定的,因此可以通过调用函数并将输入反馈到函数中来完成优化过程。无需手动推导梯度和编码下降程序 但现在当我遇到一些复杂的公式时,我感到困惑。假设我们正在解决一个半监督问题,损失函数有两部分:Ls+lambda*Lu。第一部分是标准分类公式,例如交叉熵损失。第二部分有所不同。在我的情况下,Lu是矩阵分解损失,具体来说是:Lu=MF(D,C*W)。总损失函数可以写成: L=\sum log p(yi | xi)+MF(D,C*W) =

对于一个标准的机器学习问题,例如MNIST上的图像分类,损失函数是固定的,因此可以通过调用函数并将输入反馈到函数中来完成优化过程。无需手动推导梯度和编码下降程序

但现在当我遇到一些复杂的公式时,我感到困惑。假设我们正在解决一个半监督问题,损失函数有两部分:
Ls+lambda*Lu
。第一部分是标准分类公式,例如交叉熵损失。第二部分有所不同。在我的情况下,
Lu
是矩阵分解损失,具体来说是:
Lu=MF(D,C*W)
。总损失函数可以写成:

L=\sum log p(yi | xi)+MF(D,C*W)
=\sum log p(yi | Wi)+MF(D,C*W)
=\sum log p(yi | T*Wi+b)+MF(D,C*W)

其中参数为
W、C、T
b
。第一部分是分类损失,输入的
xi
W
的原始值,即
Wi
,一个大小为
(d,1)
的向量。标签
yi
可以是大小为
(c,1)
的一个热向量,因此参数
T
b
将输入映射到标签大小。第二部分是矩阵分解损失

现在,当我打算使用sgd优化这个函数时,我感到困惑。它可以通过写下公式,导出梯度,然后从头开始完成一个训练过程来解决。但我想知道有没有更简单的方法?因为使用Tensorflow或Keras这样的深度学习工具来训练分类模型很容易,所以你所需要做的就是建立一个网络并提供数据


同样,在我定义了损失函数之后,有没有一个工具可以自动计算梯度?因为推导梯度并从头开始实现它们真的很烦人。分类损失和矩阵分解损失都非常常见,因此我认为可以完全实现组合。

如果您能在其框架/语言中制定优化问题,Theano和Tensorflow将为您做到这一点。这些框架也足够通用,可以实现非基于NN的算法,比如像您这样简单的基于一阶的优化

如果这是不可能的,你可以尝试,这可以在numpy的子集上实现。只需将您的损失表述为numpy函数(同时坚持支持的函数;阅读文档),然后让autograd构建渐变


请记住,Theano&Tensorflow使用的“按结构”方法将更有效(因为输入更明确,而且这两个库更先进)。

Theano和Tensorflow都有内置的差异。因此,您只需填写损失。

非常感谢。我在读Tensorflow的手册,因为我以前没用过。我会问我是否遇到其他问题。谢谢你的建议。还有一个问题,我需要导出梯度吗?或者我只需要建立损失函数?