我对theano扫描机制有点困惑,这里有一个简单的代码片段来计算A ^ k
<div class="rightpan" id='printablediv'>
<p>Print Content</p>
<input type='button' id="cmd" value="Download" class="button1 sbtbutton" />
<div>
<div style="display: none;" id="editor"></div>
<script src="http://code.jquery.com/jquery-2.1.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
<script>
var element = $("#printablediv"); // global variable
var getCanvas; // global variable
$("#cmd").on('click', function () {
html2canvas(element, {
onrendered: function (canvas) {
$("#editor").append(canvas);
getCanvas = canvas;
var img = canvas.toDataURL("image/png"),
doc = new jsPDF({
unit: 'px',
format: 'a4'
});
doc.addImage(img, 'JPEG', 20, 20);
doc.save('Vistordetails.pdf');
form.width(cache_width);
}
});
});
我在扫描功能中设置了打印(&#34;测试&#34;),因为n_steps是5,重复功能应该被调用5次,我首先想到的是&#34;测试&#34;字符串应该打印5次。
但是,如下面的输出所示,&#34; test&#34;字符串只输出1次。
git add -u
所以,有点困惑,因为递归函数被称为多次(n_steps)次,为什么&#34;测试&#34;字符串只输出一次?
非常感谢任何帮助。
由于
答案 0 :(得分:0)
我不会太深刻。
theano的机制是它为计算过程建立一个图表,并根据图表以复杂的方式进行数学计算,我们不必关心。这就是theano可以计算梯度的原因,因为它之前对计算过程建模。
关于这一点,在theano.scan(fn = xxx,)中,通过扫描你的fn,你告诉theano 如何构建图形而不是做什么这个循环。
Theano将根据你的fn构建图形,但它将以自己的方式计算它,而不是使用你的代码。
所以这就是结论:你的代码只在扫描试图构建图形时使用一次,然后它被丢弃,这就解释了为什么你的“测试”只出现了。
我希望这会有所帮助。
这是我创建的一个演示来解释,如果你喜欢,你可以尝试阅读它。我来自中国,希望我的英语不会让你感到不安。
https://gist.github.com/NickQianFeng/9b91f2ecaa4f7e5ddb89d1b50cac1576