- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试优化一个简单动态系统的模拟,其中网络的响应及其参数(权重)根据简单的线性方程发展。模拟需要运行数千万个时间步,但网络规模通常很小。因此,性能受矩阵向量乘积的限制较少,而是受临时数组、边界检查和其他不太明显的因素的限制。由于我是 Julia 的新手,我会很感激任何进一步优化性能的提示。
function train_network(A, T, Of, cs, dt)
N, I = size(T)
z = zeros(I)
r = zeros(N)
@inbounds for t in 1:size(cs, 1)
# precompute
Az = A*z
Ofr = Of*r
# compute training signal
@devec z += dt.*(Az + cs[t] - 0.5.*z)
I_teach = T*(Az + cs[t])
Tz = T*z
# rate updates
@devec r += dt.*(I_teach - Ofr - 0.1.*r)
# weight updates
for i in 1:I
@devec T[:, i] += dt.*1e-3.*(z[i].*r - T[:, i])
end
for n in 1:N
@devec Of[:, n] += dt.*1e-3.*(Tz.*r[n] - Of[:, n])
end
end
end
# init parameters
N, I = 20, 2
dt = 1e-3
# init weights
T = rand(N, I)*N
A = rand(I, I)
Of = rand(N, N)/N
# simulation time & input
sim_T = 2000
ts = 0:dt:sim_T
cs = randn(size(ts, 1), I)
@time train_network(A, T, Of, cs, dt)
3.420486 seconds (26.12 M allocations: 2.299 GB, 6.65% gc time)
2.648113 seconds (18.00 M allocations: 1.669 GB, 5.60% gc time)
1.990031 seconds (2.00 M allocations: 152.589 MB, 0.69% gc time)
blas_set_num_threads(1)
1.638287 seconds (11 allocations: 1.266 KB)
CPU times: user 3.46 s, sys: 6 ms, total: 3.47 s, Wall time: 3.47 s
最佳答案
虽然您使用的是 Devectorize.jl
包,我建议您将所有这些矢量化操作显式写为简单的循环。我希望这会给您带来显着的性能提升。Devectorize
package 确实是一个很大的贡献,但是要看到它为你做的脏活,你可以做这样的事情(来自 package README 的一个例子):
using Devectorize
a = rand(2,2);
b = rand(2,2);
c = rand(2,2);
julia> macroexpand(:(@devec r = exp(a + b) .* sum(c)))
macroexpand
是一个函数,它告诉您
@devec
的代码。宏扩展其参数(该行其余部分的代码)。
for
你会用手写的循环。
exp
是将通常的指数函数应用于矩阵的每个元素的函数,相当于
map(exp, a+b)
.
expm
给出矩阵的指数.有人说不赞成使用
exp
.]
关于performance - Julia:优化简单动力系统的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32845996/
我正在尝试为 Minecraft 进行 bukkit 编程,但出于某种原因,我坚持尝试设置一个 block 供电。我不想在方 block 下设置红石 torch 。 我试图将数据更改为主动杠杆。如果有
我在文档中寻找简单的淡入/淡出,但找不到任何东西。 是否可以在超强的循环信号上进行淡入/淡出? //编辑 我正在使用 CrossExample 并以小脉冲循环播放声音。我想对循环信号应用超强的淡入和淡
我正在使用 angular powered bootstrap ngbDatepicker .我已经创建了我自己的自定义控件,它将在不同的页面中用于日期捕获,如下所示。 我在这里传递了 birth
我想用Dymos解决最优控制问题: enter image description here 服从动力系统: enter image description here 我有两个问题: (1)如何设置V
我想用Dymos解决最优控制问题: enter image description here 服从动力系统: enter image description here 我有两个问题: (1)如何设置V
我是一名优秀的程序员,十分优秀!