草庐IT

Python theano.scan taps 参数

coder 2023-08-23 原文

我拼命地试图理解 taps 的论点
在 theano.scan 函数中。不幸的是我
无法提出具体问题。

我只是不明白“点击”机制。
嗯,我还好。我知道序列的顺序
传递给函数,但我不知道
意义。例如(我从
另一个问题 Python - Theano scan() function ):

import numpy as np
import theano
import theano.tensor as T


def addf(a1,a2):
    print(a1)
    print(a2)
    return a1+a2

i = T.iscalar('i')
x0 = T.ivector('x0') 
step= T.iscalar('step')

results, updates = theano.scan(fn=addf,
                   outputs_info=[dict(initial=x0, taps=[-3])],
                   non_sequences=step,
                   n_steps=i)

f=theano.function([x0, step,i],results)

input = [2, 3]

print(f(input, 2, 20))

将水龙头设置为 -1 对我来说确实有意义。据我所理解
这与不设置抽头值和整个向量“x0”相同
正在传递给 addf 函数。然后将添加 x0
使用“step”参数(int 2 将广播到相同的大小)。
在下一次迭代中,结果 [4, 5] 将作为输入,依此类推
产生以下输出:
[[ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]
 [12 13]
 [14 15]
 [16 17]
 [18 19]
 [20 21]
 [22 23]
 [24 25]
 [26 27]
 [28 29]
 [30 31]
 [32 33]
 [34 35]
 [36 37]
 [38 39]
 [40 41]
 [42 43]]

然而,将 taps 设置为 -3 会产生以下输出:
[ 5  2  6  7  4  8  9  6 10 11  8 12 13 10 14 15 12 16 17]

我没有任何解释扫描功能如何创建这个
输出。为什么现在只是一个列表?
“打印(a1)”结果如预期的那样
x0[t-3]

虽然我知道这是a1应该有的值,
我不知道如何解释它。 t-3 th 值是多少
x0?
Theano 文档
似乎并没有详细介绍 taps 参数......
所以希望你们中的一个会是。

谢谢

最佳答案

为了更好地理解 taps 的使用,你应该先了解如何scan使用 outputs_info参数以及为它提供的值(准确地说是 initial)如何改变结果的性质。
scan期望你提供你期望从这个操作中得到的输出类型(除非你没有提供任何初始值并简单地提到 None ,在这种情况下它将开始第一轮 { step } 并且输出是在连续几轮中没有作为参数传递给 fn)。

所以scan用于对提供的 sequences 进行迭代归约.这意味着在 step n (并且没有为 tapssequences 指定 outputs_info ),给定的 fn将应用于每个 sequences 的第 n 个元素以及前一个(第 n-1 个)生成的输出 step .因此默认值为 tapssequences0outputs_info-1 .

另一种看待它的方法是考虑所有序列都由它们各自的第一维上的切片组成。因此,对于特定步骤,sequence(s) 的当前切片并将上一步的输出切片传递给 fn并将计算出的输出作为新切片添加到结果中,然后将用于下一个 step .很明显,每个输出切片都具有相同的形状。如果您提供初始切片作为 outputs_info 的一部分那么它也应该具有与fn的应用程序产生的相同的形状。 .在您的示例中,如果 output_info=[dict(initial=x0)] ,需要 [2, 3]作为第一个切片并将其用于第一个 step作为参数 a1addf .

但通常在信号处理(和其他地方)中,您需要的不仅仅是最后的数据点作为因果信息。这里我用时间来表示steps .无论如何,这里是taps很有用,有助于准确指示来自 sequences 的数据点和 results必须用于当前 step .在您的示例中,这意味着对于当前 step倒数第三个输出应传递给 fn .

这就是您在描述 initial 时需要小心的地方。为 outputs_info .因为扫描会先拆分initial沿第一个维度将值分成多个切片。 那么这组切片中的第一个切片将被认为是最早的切片 (在您的示例中倒数第三)需要计算第一个 step 的输出 .

让我们假设在你的例子中,taps=[-2]input = [2, 3] .在这种情况下, scan 会将输入拆分为多个切片并使用第一个切片(此处为值 2)作为参数 a1addf .结果值 4 将添加到输出中,对于下一步,切片将包括 [2, 3, 4],其中值 3 位于倒数第二个 (-2) 抽头上。等等。但是,与 taps=[-3]和相同的 input ,缺少一个值,这就像说您在时间 (t-3) 和 (t-2) 处收集了值,但没有在 (t-1) 处收集值。

因此,如果您认为您的输出具有某种形状,并且您需要多次抽头输出超过 -1,则 initial 的值应该是所需输出形状的元素列表 正好检索最早的切片所需的尽可能多的此类元素。

域名注册地址:
在您的示例中,如果您想获得每个 step 的结果的二维向量并且正在使用 taps=[-3] ,然后 input应该是 3 个这样的二维向量的列表。如果您想获得单值结果,则 input应该是一个包含 3 个整数的列表。包含 2 个整数的列表在这种情况下根本没有意义。只有 taps 才有意义是 -2 或 -1 或 [-2, -1] .

关于Python theano.scan taps 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993665/

有关Python theano.scan taps 参数的更多相关文章

  1. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  2. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  3. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  4. ruby - 检查方法参数的类型 - 2

    我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)

  5. ruby-on-rails - 在默认方法参数中使用 .reverse_merge 或 .merge - 2

    两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option

  6. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  7. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  8. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  9. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  10. ruby-on-rails - 在 Controller 中干净地处理多个过滤器(参数) - 2

    我有一个名为Post的类,我需要能够适应以下场景:如果用户选择了一个类别,则只显示该类别的帖子如果用户选择了一种类型,则只显示该类型的帖子如果用户选择了一个类别和类型,则只显示该类别中该类型的帖子如果用户没有选择任何内容,则显示所有帖子我想知道我的Controller是否不可避免地会因大量条件语句而显得粗糙...这是我解决此问题的错误方法-有谁知道我如何才能做到这一点?classPostsController 最佳答案 您最好遵循“胖模型,瘦Controller”的惯例,这意味着您应该将这种逻辑放在模型本身中。Post类应该能够报告

随机推荐