当前,由于缺少前端的支持,使用MXNet优化简单功能并不像张量流那样容易。
首先,您需要一个损失功能作为网络的最后一层。在这里是log_x_squared。使用MakeLoss创建损失函数。
其次是投入和权重。由于当前MXNet变量中的变量不算作可训练的重量,因此您需要将x设置为重量。这是一种解决方法:设置“ fake”输入变量,该变量始终为1。之后,添加具有1个隐藏单元且无偏差的完全连接的层。这给我们“ 1 * x”。现在我们的x是一个权重。
第三,如果您想对单个数据样本进行多次优化,那么module.fit可能不是最佳选择。初始化优化器后。您只需要多次调用module.forward_backward()和module.update()。对于forward_backward函数,您需要传递一个databatch,与dataiter相比,它是一个更简单的接口。在这里,我们只需要每次传递一个常数ndarray 1。
实际上,我们构建了一个log(1 * x)^ 2的计算图,并且x变成了权重而不是变量。
无论如何,我们应该考虑提供一个类似的张量流接口来优化变量。
希望这是有用的信息!
0
我正在尝试使用MXNet的梯度下降优化器来最小化功能。 Tensorflow中的等效示例将是:
我不确定如何在MXNet中完成相同的任务。优化器API 文档似乎没有等效的方法。到目前为止,这是我尝试过的。主要的困惑在于需要传递训练数据:
似乎应该以某种方式将
x
变量作为data_iter
反馈回来,但我不知道该如何完成。更新:感谢kevinthesun的出色回答!这是建立在单个隐藏层神经网络之上的工作最小化例程:
并使用它:
另一个: