python - 在 Python 中存储自定义梯度下降算法的每一步中的参数值
问题描述
我正在尝试制作自定义梯度下降估计器,但是,我遇到了在梯度下降算法的每一步存储参数值的问题。这是代码骨架:
from numpy import *
import pandas as pd
from joblib import Parallel, delayed
from multiprocessing import cpu_count
ftemp = zeros((2, ))
stemp = empty([1, ], dtype='<U10')
la = 10
vals = pd.DataFrame(index=range(la), columns=['a', 'b', 'string']
def sfun(k1, k2, k3, string):
a = k1*k2
b = k2*k3
s = string
nums = [a, b]
strs = [s]
return(nums, strs)
def store(inp):
r = rsfun(inp[0], inp[1], inp[2], inp[3])
ftemp = append(ftemp, asarray(r[0]), axis = 0)
stemp = append(stemp, asarray(r[1]), axis = 0)
return(ftemp, stemp)
for l in range(la):
inputs = [(2, 3, 4, 'he'),
(4, 6, 2, 'je'),
(2, 7, 5, 'ke')]
Parallel(n_jobs = cpu_count)(delayed(store)(i) for i in inputs)
vals.iloc[l, 0:2] = ftemp[0, 0], ftemp[0, 1]
vals.iloc[l, 2] = stemp[0]
d = ftemp[2, 0]-ftemp[0, 0]
注意:大部分梯度下降的东西都被删除了,因为我对此没有任何问题。我遇到的主要问题是在每个步骤中存储值。
sfun() 是损失函数(我知道它在这里看起来不像),而 store() 只是尝试存储每个步骤的参数值。
这里的重要方面是我想并行化该过程,因为 sfun() 计算量很大,并且我想为所有并行运行保存值的问题。
我尝试以许多不同的方式解决这个问题,但我总是得到不同的错误。
解决方案
无需制作临时存储数组,可以通过以下方式直接存储 Parallel() 函数的结果:
a = Parallel(n_jobs = cpu_count)(delayed(store)(i) for i in inputs)
最重要的是,填充 a 是为了给定输入。
推荐阅读
- python - 如何将模块用作包的一部分并用作可直接执行的脚本?
- for-loop - 如何在实际结果之前阻止回收器视图重复循环项目?
- generics - 具有泛型参数类型的函数
- java - java.lang.UnsatisfiedLinkError:java.library.path 中没有 netty_transport_native_epoll_x86_64
- reporting-services - 在 HANA 计算视图中使用 IN 运算符,在 SSRS 报告中使用
- ios - 为什么在 xamarin 表单中进行写入操作后,我会在 iOS 中获得 BLE 配对请求对话框?
- ruby - 删除 ruby 字符串中的“\”字符
- javascript - 在 React 中将 D3 快速排序示例转换为 D3 版本 6
- html - 如何防止图像溢出 flex-grow-1 项?
- python - .append 和 pd.concat() 的问题