我正在寻找一个记录良好的算法可视化库/工具,您可以从源代码中调用.
我看了一下jhave - 用法示例.我喜欢它,它似乎有一些文档,但我不相信它的未来.
我发现这篇关于Algorithm explorer的文章它有一个好主意.它是作为c ++ api实现的,但我无法找到它.
我的主要想法是我想为大脑做一些单元测试.
所以我构建了各种练习,将来当我想测试我的知识时,我会重做它们.
我发现图像与我的关系更长,因此我想在某些状态下可视化算法.(我可能还记得更好的一个棘手的案例,例如当数据反向排序时会发生什么,如果我查看数据,我会使用快速排序.)
理想的工具:
1.必须与任何语言集成.
2.必须通过不断增长的社区和实例进行详细记录.
3.在有能力的渲染引擎(ogre,xna)之上实现.
在Matlab我有一堂课
classdef myClass
properties
% some properties here...
end
methods ( Access = 'public' )
function obj = myClass()
% constructor...
end
function obj = delete( obj )
% suppose to be destructor...
fprintf(1, 'delete\n');
end
end % public methods
end
Run Code Online (Sandbox Code Playgroud)
当我clear是一个类型的变量时,Matlab的默认行为是myClass什么?例如:
>> m = myClass();
>> clear m
Run Code Online (Sandbox Code Playgroud)
我希望Matlab m在这个阶段调用析构函数,但它似乎没有!
我的问题:
clear在变量变量时如何强制调用析构函数?
这是Matlab的默认行为吗?clear在变量变量时调用析构函数是不是更合乎逻辑?
是否有可能Matlab的类没有析构函数方法(也就是说,在销毁类时没有默认方法)?或者我错过了什么?
是否有可能只有派生的类handle具有析构函数(delete方法)?
谢谢!
编辑:按照乔纳斯的回答,简要总结:
Matlab有两种类型:值类(默认)和句柄类(从handle超类派生).值类往往提供更好的性能,但是,它们没有析构函数. …
我正在构建我的第一个大型MATLAB程序,并且我已经设法为所有内容编写原始矢量化代码,直到我试图在立体投影中创建表示矢量密度的图像.经过两次尝试失败后,我去了Mathworks文件交换站点,找到了一个符合Malcolm Mclean礼貌的开源程序.使用测试矩阵,他的函数产生如下:
虽然这几乎正是我想要的,但他的代码依赖于一个三重嵌套的for循环.在我的工作站上,这段代码中的大小为25000x2的测试数据矩阵耗时65秒.这是不可接受的,因为我将在我的项目中扩展到大小为500000x2的数据矩阵.
到目前为止,我已经能够对最里面的循环进行矢量化(这是最长/最差的循环),但我想继续并尽可能完全摆脱循环.这是Malcolm的原始代码,我需要进行矢量化:
dmap = zeros(height, width); % height, width: scalar with default value = 32
for ii = 0: height - 1 % 32 iterations of this loop
yi = limits(3) + ii * deltay + deltay/2; % limits(3) & deltay: scalars
for jj = 0 : width - 1 % 32 iterations of this loop
xi = limits(1) + jj * deltax + deltax/2; % limits(1) & deltax: scalars
dd = 0;
for kk = …Run Code Online (Sandbox Code Playgroud) 当在训练期间遇到困难时(nans,损失不会收敛等),通过debug_info: true在'solver.prototxt'文件中设置来查看更详细的训练日志有时是有用的.
然后训练日志看起来像:
Run Code Online (Sandbox Code Playgroud)I1109 ...] [Forward] Layer data, top blob data data: 0.343971 I1109 ...] [Forward] Layer conv1, top blob conv1 data: 0.0645037 I1109 ...] [Forward] Layer conv1, param blob 0 data: 0.00899114 I1109 ...] [Forward] Layer conv1, param blob 1 data: 0 I1109 ...] [Forward] Layer relu1, top blob conv1 data: 0.0337982 I1109 ...] [Forward] Layer conv2, top blob conv2 data: 0.0249297 I1109 ...] [Forward] Layer conv2, param blob 0 …
machine-learning neural-network gradient-descent deep-learning caffe
哪个optimizer与loss?之间有明确的联系?
优化器如何知道在没有通话的情况下从哪里获得损失的梯度optimizer.step(loss)?
- 更多背景 -
当我最小化损失时,我没有必要将渐变传递给优化器.
loss.backward() # Back Propagation
optimizer.step() # Gardient Descent
Run Code Online (Sandbox Code Playgroud) 我正在尝试用Java计算逆矩阵.
我正在遵循伴随方法(首先计算伴随矩阵,然后转置这个矩阵,最后,将它乘以行列式值的倒数).
它在矩阵不太大时起作用.我已经检查过,对于尺寸为12x12的矩阵,可以快速得到结果.但是,当矩阵大于12x12时,完成计算所需的时间呈指数增长.
我需要反转的矩阵是19x19,需要花费太多时间.更多时间消耗的方法是用于计算行列式的方法.
我正在使用的代码是:
public static double determinant(double[][] input) {
int rows = nRows(input); //number of rows in the matrix
int columns = nColumns(input); //number of columns in the matrix
double determinant = 0;
if ((rows== 1) && (columns == 1)) return input[0][0];
int sign = 1;
for (int column = 0; column < columns; column++) {
double[][] submatrix = getSubmatrix(input, rows, columns,column);
determinant = determinant + sign*input[0][column]*determinant(submatrix);
sign*=-1;
}
return determinant;
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何更有效地计算大矩阵的行列式吗?如果没有,有没有人知道如何使用其他算法计算大矩阵的逆?
谢谢
我 exist(x, 'file')用来检查我的机器上是否存在文件.执行此命令需要FOREVER(每次调用超过10秒!).
我matlabpath不是太长(大约200个条目),路径上的所有文件夹都在我的本地驱动器上(没有网络).
exist永远?PS,
这个调用exist是Matlab执行的一部分loadlibrary.所以,如果你打电话loadlibrary而且你不知道为什么需要永远 - 这个问题也适合你.
我有两个图像,并使用筛选找到三个相似的2D点.我需要计算图像之间的仿射变换.不幸的是,我错过了讲座,那里的信息对我来说有点密集.计算这个2x3矩阵的一般方法是什么?
我有一个2x3矩阵中的点矩阵[x1 y1; x2 y2; x3 y3],但我从那里迷失了.谢谢你的帮助.
matlab geometry image-processing linear-algebra computer-vision
在Caffe,我正在尝试实现一个用于语义分割的完全卷积网络.我想知道是否有一个特定的策略来设置'solver.prototxt'以下超参数的值:
是否取决于训练集的图像数量?如果是这样,怎么样?
machine-learning neural-network deep-learning caffe conv-neural-network
gdb提供读取或写入特定线性地址的功能,例如:
(gdb) x/1wx 0x080483e4
0x80483e4 <main>: 0x83e58955
(gdb)
Run Code Online (Sandbox Code Playgroud)
但是如何指定逻辑地址?我按照以下指示来:
0x0804841a <+6>: mov %gs:0x14,%eax
Run Code Online (Sandbox Code Playgroud)
我如何读取gdb中"%gs:0x14"的内存,或者将此逻辑地址转换为我可以在x命令中使用的线性地址?
注意:我知道在这条指令之后我只能阅读%eax,但这不是我关心的问题
matlab ×4
caffe ×2
algorithm ×1
destructor ×1
determinants ×1
file-exists ×1
file-io ×1
gdb ×1
geometry ×1
java ×1
matrix ×1
oop ×1
path ×1
performance ×1
pytorch ×1
unit-testing ×1
x86 ×1