我最近尝试使用Google的seq2seq来建立一个小型的NMT系统.我设法让一切工作正常,但我仍然想知道时代数和模型训练步数之间的确切差异.
如果我没有弄错的话,一个时期包含多个训练步骤,并且一旦您的整个训练数据被处理一次就过去了.但是,当我查看Google自己的NMT教程中的文档时,我不明白两者之间的区别.请注意以下代码段的最后一行.
export DATA_PATH=
export VOCAB_SOURCE=${DATA_PATH}/vocab.bpe.32000
export VOCAB_TARGET=${DATA_PATH}/vocab.bpe.32000
export TRAIN_SOURCES=${DATA_PATH}/train.tok.clean.bpe.32000.en
export TRAIN_TARGETS=${DATA_PATH}/train.tok.clean.bpe.32000.de
export DEV_SOURCES=${DATA_PATH}/newstest2013.tok.bpe.32000.en
export DEV_TARGETS=${DATA_PATH}/newstest2013.tok.bpe.32000.de
export DEV_TARGETS_REF=${DATA_PATH}/newstest2013.tok.de
export TRAIN_STEPS=1000000
Run Code Online (Sandbox Code Playgroud)
在我看来,似乎只有一种方法来定义训练步骤的数量,而不是模型的时代数量.是否有可能在术语上存在重叠,因此没有必要定义多个时期?
neural-network machine-translation tensorflow sequence-to-sequence
我不确定我应该如何使用 gensim 的 Word2Vec 的 most_similar 方法。假设您想测试经过验证的例子:男人代表国王,女人代表 X;找到 X。我认为这就是你可以用这种方法做的事情,但从我得到的结果来看,我认为这不是真的。
文档中写道:
找到前 N 个最相似的词。正面词对相似度有正面贡献,负面词对相似度有负面影响。
该方法计算给定词的投影权重向量的简单平均值与模型中每个词的向量之间的余弦相似度。该方法对应于原始 word2vec 实现中的词类比和距离脚本。
我假设,然后,most_similar取正例和反例,并尝试在向量空间中找到尽可能接近正向量并尽可能远离负向量的点。那是对的吗?
另外,有没有一种方法可以让我们将两点之间的关系映射到另一个点并得到结果(参见 man-king woman-X 示例)?
在文档中,Manager与上下文管理器(即with)一起使用,如下所示:
from multiprocessing.managers import BaseManager
class MathsClass:
def add(self, x, y):
return x + y
def mul(self, x, y):
return x * y
class MyManager(BaseManager):
pass
MyManager.register('Maths', MathsClass)
if __name__ == '__main__':
with MyManager() as manager:
maths = manager.Maths()
print(maths.add(4, 3)) # prints 7
print(maths.mul(7, 8)) # prints 56
Run Code Online (Sandbox Code Playgroud)
但是,除了名称空间之外,这样做还有什么好处?对于打开文件流,其好处是显而易见的,因为您不必手动.close()进行连接,但这对Manager有什么作用?如果您不在上下文中使用它,则必须使用什么步骤来确保所有内容均正确关闭?
简而言之,与上述类似,使用以上内容有什么好处:
manager = MyManager()
maths = manager.Maths()
print(maths.add(4, 3)) # prints 7
print(maths.mul(7, 8)) # prints 56
Run Code Online (Sandbox Code Playgroud) 对于给定的二维张量,我想检索值为 的所有索引1。我期望能够简单地使用torch.nonzero(a == 1).squeeze(),这将返回tensor([1, 3, 2])。然而,相反,torch.nonzero(a == 1)返回一个 2D 张量(没关系),每行有两个值(这不是我所期望的)。然后,应使用返回的索引来索引 3D 张量的第二个维度(索引 1),再次返回 2D 张量。
import torch
a = torch.Tensor([[12, 1, 0, 0],
[4, 9, 21, 1],
[10, 2, 1, 0]])
b = torch.rand(3, 4, 8)
print('a_size', a.size())
# a_size torch.Size([3, 4])
print('b_size', b.size())
# b_size torch.Size([3, 4, 8])
idxs = torch.nonzero(a == 1)
print('idxs_size', idxs.size())
# idxs_size torch.Size([3, 2])
print(b.gather(1, idxs))
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,导致运行时错误:
RuntimeError:无效参数 4:索引张量必须与 C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorEvenMoreMath.cpp:453 处的输入张量具有相同的维度
看来idxs不是我想象的那样,也不能按照我想的方式使用。idxs是 …
python multidimensional-array pytorch tensor tensor-indexing
所以,假设您想要替换某些部分的href a's:
$("a").each(function() {
var link = $(this).attr("href").replace("this", "that");
$(this).attr("href", link);
});
Run Code Online (Sandbox Code Playgroud)
但是你怎么用相同的方法替换字符串的多个部分呢?比方说,你要替换的所有occurence this并that用what.
你怎么能最有效地做到这一点?
我仍在学习一些体面的正则表达式,但我本以为可以。
这有效:
str.replace(/ /g,"").replace(/(\r\n|\n|\r)/gm,"");
Run Code Online (Sandbox Code Playgroud)
但是,这不是一个简短的版本。我哪里做错了?
str.replace((/ /g)|(/(\r\n|\n|\r)/gm),"");
Run Code Online (Sandbox Code Playgroud) 当在 CSS 中询问 jQuery 的持续时间时,它会以秒为单位返回该值,例如1.2s。例子在这里。
var d = $("div"),
propDur = d.css("animation-duration"),
propDurArr = propDur.replace(" ","").split(","),
propDel = d.css("animation-delay"),
propDelArr = propDel.replace(" ","").split(",");
console.log(propDurArr[propDurArr.length - 1]);
console.log(propDelArr[propDelArr.length - 1]);
Run Code Online (Sandbox Code Playgroud)
对此有两个问题:
ms)?例如:1.2s-> 1200。因为2.您可以轻松删除点,如下所示:
propDel.replace(/(\s|.)/g,"").split(",")
Run Code Online (Sandbox Code Playgroud)
但我如何提出这样的条件:
if string contains dot
ADD 00
if string does NOT contain dot
ADD 000
Run Code Online (Sandbox Code Playgroud)
请回复1和2。
大多数人都知道,当您启用缓存时,很难看到您对文件所做的更改。例如,您的样式表不会反映您对其所做的更改。一个解决方案是附加一个“版本号”,如下所示:
<link rel="stylesheet" href="css/styles.css?v=2">
Run Code Online (Sandbox Code Playgroud)
但是,总是手动设置此值非常麻烦。我想出的一个解决方案是让 PHP 在每个缓存之前生成一个唯一值。最直接的方法是根据日期创建一个数字。更具体地说,我会考虑上次更新 PHP 文件的时间。
<link rel="stylesheet" href='css/styles.css?v=<?php echo date("ymd-Gi", getlastmod()) ?>'>
Run Code Online (Sandbox Code Playgroud)
这仍然需要我在每次保存 CSS 文件时保存 PHP 文件,但我认为在每种情况下都比手动设置版本号容易得多。
我想知道 PHP 中是否有更简单的方法来做到这一点。显然,最好的方法是检查样式表的最后修改时间并基于此构建版本号。那可能吗?
我正在查看一些Perl代码,我得到了这个部分:
foreach (@somevar) {
if (-e "$_/$anothervar") {
$boolflag=1;
last;
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚-e的用途.我认为后来的字符串是一条路径(从它的结构中得出),但据我所知,正在发生的事情.
我在Perl帮助中寻找-e,但我不明白-e这个定义如何在if子句中起作用.
-e program one line of program (several -e's allowed, omit programfile)
Run Code Online (Sandbox Code Playgroud) 对我来说,Perl引用很难掌握.在阅读使用对象方法的一些类似OO的脚本时,我从未将该对象视为参考.即使对于大对象,也可以将其用作参考而不是复制到子例程(方法).
Run Code Online (Sandbox Code Playgroud)$p->a_method($value);在幕后,perl将会运行
Run Code Online (Sandbox Code Playgroud)a_method($p, $value);
但如果$p是巨大的对象,你不想把它作为参考传递吗?
a_method(\$p, $value)
Run Code Online (Sandbox Code Playgroud)
我一直都明白,如果对象很大,通过引用传递可以导致显着的速度增加.在OO中,您很可能正在使用大型对象(例如巨大的对象XML::Twig).那么当实际将它作为对子程序的引用传递时,如何在这样的对象上调用方法呢?
我正在使用代码
footer h1,h2,h3,h4,h5,h6{
color: #fff;
margin: 10px auto;
}
Run Code Online (Sandbox Code Playgroud)
选择页脚内的所有h标签.有一个HTML标签页脚,如果我没有弄错,我的代码应该只选择页脚标签内的那些h1,h2,h3,h4,h5,h6标签.但令人惊讶的是,当我测试我的代码时,它会选择页脚标记之外的所有其他h1,h2,h3,h4,h5,h6标记!
怎么可能?有什么我想念的吗?
我试着用搜索引擎,并因此搜索,但你可以想像,寻找在不提供我比其他任何有用的信息在 Perl的.
我遇到了这个脚本:
($script,$xpaths,$treebanks)=@ARGV;
open(IN,$xpaths);
while (<IN>) {
# Some code
}
Run Code Online (Sandbox Code Playgroud)
但我不明白IN的情况如何.这是什么意思?我理解这是一个愚蠢的问题,但正如我所指出的那样,搜索尝试并没有带来任何成果.