当我开始训练我的 word2vec 模型时,我看到了警告
考虑将层大小设置为 4 的倍数以获得更好的性能
这听起来很不错,但我layer在文档中找不到任何对论点或类似内容的引用。
那么如何增加图层大小,以及如何确定一个好的值呢?
我正在将Keras代码转换为PyTorch,因为我比后者更熟悉后者.但是,我发现它不是学习(或者只是勉强).
下面我提供了几乎所有的PyTorch代码,包括初始化代码,以便您可以自己尝试.你需要自己提供的唯一一件事就是嵌入这个词(我相信你可以在网上找到很多word2vec模型).第一个输入文件应该是带有标记文本的文件,第二个输入文件应该是一个带有浮点数的文件,每行一个.因为我提供了所有代码,所以这个问题可能看起来庞大而且过于宽泛.但是,我的问题是具体的,我认为:我的模型或训练循环中的错误导致我的模型没有或几乎没有改善.(见下面的结果.)
我试图在适用情况下提供了很多意见,我所提供的形状变换以及因此您不必有运行代码,看看是怎么回事.数据准备方法对于检查并不重要.
最重要的部分是前进方法RegressorNet和训练循环RegressionNN(诚然,这些名称被严格选择).我认为错误在某处.
from pathlib import Path
import time
import numpy as np
import torch
from torch import nn, optim
from torch.utils.data import DataLoader
import gensim
from scipy.stats import pearsonr
from LazyTextDataset import LazyTextDataset
class RegressorNet(nn.Module):
def __init__(self, hidden_dim, embeddings=None, drop_prob=0.0):
super(RegressorNet, self).__init__()
self.hidden_dim = hidden_dim
self.drop_prob = drop_prob
# Load pretrained w2v model, but freeze it: don't retrain it.
self.word_embeddings = nn.Embedding.from_pretrained(embeddings)
self.word_embeddings.weight.requires_grad = False
self.w2v_rnode = nn.GRU(embeddings.size(1), hidden_dim, bidirectional=True, dropout=drop_prob)
self.dropout …Run Code Online (Sandbox Code Playgroud) 在深度学习中,您通常有一个希望优化的目标(例如图像识别)。然而,在我的领域(自然语言处理),我们看到了多任务训练的兴起。例如,在单个系统中的下一个句子预测和句子分类。
我了解如何构建前向传递,例如分类任务(obj1)和回归任务(obj2)
class Net(nn.Module):
def __init__():
super().__init__()
self.linear = Linear(300, 200)
self.obj1 = Linear(200, 5)
self.obj2 = Linear(200, 1)
def forward(inputs):
out = self.linear(inputs)
out_obj1 = self.obj1(out)
out_obj2 = self.obj2(out)
return out_obj1, out_obj2
Run Code Online (Sandbox Code Playgroud)
但问题就变成了,如何优化这一点。您是否分别对这两个损失进行向后传递?或者将它们减少为单一损失(例如总和、平均值)?是否有一种通常用于多任务学习的方法?
为了跟进这一点,也许有人甚至会认为不同层的参数需要不同的优化器。在这种情况下,我认为损失必须单独处理。
我正在尝试使用 Stanza(使用斯坦福 CoreNLP)从句子中提取名词短语。这只能通过 Stanza 中的 CoreNLPClient 模块来完成。
# Import client module
from stanza.server import CoreNLPClient
# Construct a CoreNLPClient with some basic annotators, a memory allocation of 4GB, and port number 9001
client = CoreNLPClient(annotators=['tokenize','ssplit','pos','lemma','ner', 'parse'], memory='4G', endpoint='http://localhost:9001')
Run Code Online (Sandbox Code Playgroud)
这是一个句子的例子,我正在使用tregrex客户端中的函数来获取所有名词短语。Tregex函数dict of dicts在python中返回a 。因此,我需要先处理 的输出,tregrex然后再将其传递给Tree.fromstringNLTK 中的函数,以将名词短语正确提取为字符串。
pattern = 'NP'
text = "Albert Einstein was a German-born theoretical physicist. He developed the theory of relativity."
matches = client.tregrex(text, pattern) ``
Run Code Online (Sandbox Code Playgroud)
因此,我想出了一种方法stanza_phrases,它必须循环遍历NLTK …
镜像站点时,其各自服务器的内容将同步(可能是自动(实时镜像)或手动). 这是真的?所有服务器是否相同,或主服务器是否存在?然后将其更改发送到其他"子服务器"?所以所有更改都必须在主服务器上进行,并且子服务器不允许更改?
预期优势:
预期的缺点:
还有哪些其他项可以添加到这些列表中?
这可能真的是一个非常基本的问题,但我已经尝试了几件事,但似乎没有用.
我有这个var:
w = $("#el").width();
Run Code Online (Sandbox Code Playgroud)
我想通过var改变#el宽度.所以设置宽度,使用var 而不重用整体.我怎么做?我已经尝试过以下方法:w$("#el").width()
w = 50;
w == 50;
w = "50px";
w == "50px";
Run Code Online (Sandbox Code Playgroud)
但这些似乎不起作用.
所以我想w在函数中使用来设置#el宽度.所以我不想使用,$("#el").width()因为我会使用它很多.我需要使用那个var.
看到这个小提琴。
enquire.register("screen and (max-width: 640px)", {
match: function () {
$("body").css("background","red");
},
unmatch: function () {
$("body").css("background","blue");
}
});
Run Code Online (Sandbox Code Playgroud)
当浏览器窗口加载的像素小于等于640px时,背景颜色将设置为红色。(即匹配事件被调用)。但是,当窗口在加载时宽于640px时,什么也不会发生,即不调用unmatch事件。为什么不?如果与条件不匹配,是否有办法强制取消匹配事件?
基本上,我想要的是查询的行为就像一个if-else语句,被立即调用。
我想知道 JS 在确定某些值时是否比 CSS 慢,因为它们都必须进行相同的计算。
换句话说,如果我%为一个元素设置边距,它将使用其父元素的宽度作为基础。例如,margin: 50% = margin: 0.5 * parent.width。那么,在内部,浏览器必须根据父级的宽度计算正确的边距,对吧?那么,这和 JS 中的计算有什么不同呢?为什么 CSS 更快?什么内部 CSS 渲染使这些计算过程比 JS 更快?
这是一把小提琴。两个子 div 是相同的,但一个 div 的边距在 CSS ( ) 中计算margin: 20%,另一个在 JS 中计算:
var $cont = $("#container");
$("#js").css("margin", $cont.width() * 0.2);
Run Code Online (Sandbox Code Playgroud)
考虑调整大小:CSS 引擎在调整大小时也必须重新计算边距,对吗?
考虑加载时间:我只是谈论实际的执行时间。换句话说:
var $cont = $("#container");
$("#js").css("margin", $cont.width() * 0.2);
Run Code Online (Sandbox Code Playgroud)
与
#css {margin: 20%;}
Run Code Online (Sandbox Code Playgroud)
不包括任何额外的(库)加载时间。jQuery 和 vanilla JS 之间的区别不应该包含在答案中。我知道两者之间的性能差异。
在其他语言中,我经常这样做:
someFunc()
someFunc() {
// This is my function
}
Run Code Online (Sandbox Code Playgroud)
这样我可以将所有函数堆叠在文件中较低的位置,但是将函数调用放在顶部.现在我对所发生的一切都有一个很好的概述.
但是,当我在Spyder的Python 3中执行此操作时,我收到了未定义名称:'myfunc'的警告
my_func("Some string")
def my_func(some_var):
print(some_var)
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但我不确定这里的最佳做法.我的方法是否会产生任何负面影响?或者它只是在你打电话之前拥有你的功能的指南?
我上面设置的代码不会为我工作.这是为什么?我正在使用Anaconda运行Python 3.4.3.我的版本有什么不同?或者是因为我在Spyder中运行它?
编辑:显然Spyder以神秘的方式工作.首先,我在定义后进行了调用,然后我将调用交换到第一行,它仍然有效.Spyder似乎缓存了功能,或者至少没有将它们清除掉.(虽然我不确定Spyder是否正在进行缓存或Python本身.我正在考虑使用Python.)对于任何想知道这一点的新手:解决方案是重新启动程序和/或Python服务.
PHP文档读取(强调我的):
error_reporting()函数在运行时设置error_reporting指令.PHP有许多级别的错误,使用此函数设置脚本持续时间(运行时)的级别.如果未设置可选级别,则error_reporting()将仅返回当前错误报告级别.
这是否意味着错误报告的级别只能在PHP脚本中设置一次,之后不会更改?例如,是否可以这样做:
error_reporting(0);
try {
errorSilently();
} catch (Exception $e) {
// Do nothing
}
error_reporting(E_ALL);
try {
errorLOUDLY();
} catch (Exception $e) {
// Do nothing
}
Run Code Online (Sandbox Code Playgroud)
请注意,我写了一个// Do nothing因为看起来如果抛出错误,Apache会以error_log任何方式将其写入,如果它被捕获或未被捕获.我想要做的是禁用该行为,而不是写入错误日志.
python ×5
jquery ×2
nlp ×2
pytorch ×2
css ×1
enquire.js ×1
function ×1
gensim ×1
javascript ×1
keras ×1
mirroring ×1
performance ×1
php ×1
python-3.x ×1
spyder ×1
stanford-nlp ×1
tensorflow ×1
variables ×1
webserver ×1
word2vec ×1