如果我理解正确,要在 keras 中执行 TBPTT,我们必须将我们的序列分成 k 个时间步长的较小部分。根据 keras 的文档,要在序列的所有部分重用 LSTM 的状态,我们必须使用有状态参数:
您可以将 RNN 层设置为“有状态”,这意味着为一个批次中的样本计算的状态将被重新用作下一个批次中样本的初始状态。这假设不同连续批次中的样品之间存在一对一映射。
所以如果我理解正确,第一批的第一个样本是第一个序列的第一个部分,第二批的第一个样本是第一个序列的第二个部分,等等。我有 125973 个长度为 1000 的序列,我分成40 个 k=25 时间步长的序列。所以我的模型应该训练 40 个批次,包含 125973 个 25 个时间步长的序列。我的问题是我的 GPU(quadro K2200,我很穷)的内存,125973 的批量大小似乎太多了。我想知道是否可以将 LSTM 的状态保持在同一批次内并在批次之间重置它,因此我应该将批次大小设为 40 和 125973 批次。
这是我的模型:
model = Sequential()
model.add(Embedding(len(char_to_num), 200, mask_zero=True, batch_input_shape=(batch_size, k)))
model.add(Dropout(0.5))
model.add(LSTM(512, activation='relu', return_sequences=True, stateful=True))
model.add(Dropout(0.5))
model.add(TimeDistributed(Dense(len(char_to_num), activation='softmax')))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
model.summary()
Run Code Online (Sandbox Code Playgroud)
EDIT 2021
今年已经有了最近的答案,但这是一个老问题。与此同时,图书馆、DL 和 NLP 的状态发生了很大变化,我已经从 LSTM 转向了 Transformers。我已经很多年没有使用 LSTM 了,我没有计划也没有时间测试发布的答案。
图形的边框/x 轴与 pyplot 条形图中的第一个和最后一个条形之间有很大的空间(第一张图片中的红色箭头)。在下图中,左图中看起来不错,但右图中浪费了很多空间。图形越大,空间就越大。
\n\n看看第二张图中浪费了多少空间:
\n\n知道如何解决这个问题吗?
\n代码:
\nplt.figure(figsize=figsize)\ngrid = plt.GridSpec(figsize[1], figsize[0], wspace=120/figsize[0])\nplt.suptitle(feature.upper())\n\n# NaN plot\nplt.subplot(grid[:, :2])\nplt.title(\'Pr\xc3\xa9sence\')\nplt.ylabel(\'occurences\')\nplt.bar([0, 1], [df.shape[0] - nan, nan], color=[\'#4caf50\', \'#f44336\'])\nplt.xticks([0, 1], [\'Renseign\xc3\xa9\', \'Absent\'], rotation=\'vertical\')\n\n# Distrib plot\nplt.subplot(grid[:, 2:])\nplt.title(\'Distribution\')\nx_pos = [i for i, _ in enumerate(sizes)]\nplt.bar(x_pos, sizes)\nplt.xticks(x_pos, labels, rotation=\'vertical\')\nplt.show()\nRun Code Online (Sandbox Code Playgroud)\ndf是我的 pandas DataFrame,nan我正在绘制的特征的空值数量,sizes是每个值出现的次数,labels是相应标签的值。
我正在尝试使用 Trainer 训练模型,根据文档(https://huggingface.co/transformers/master/main_classes/trainer.html#transformers.Trainer)我可以指定一个标记器:
tokenizer (PreTrainedTokenizerBase, optional) – 用于预处理数据的 tokenizer。如果提供,将用于在批处理输入时自动填充输入的最大长度,并将沿模型保存,以便更轻松地重新运行中断的训练或重用微调的模型。
因此应该自动处理填充,但是在尝试运行它时出现此错误:
ValueError:无法创建张量,您可能应该使用 'padding=True' 'truncation=True' 激活截断和/或填充以具有相同长度的批处理张量。
分词器是这样创建的:
tokenizer = BertTokenizerFast.from_pretrained(pretrained_model)
Run Code Online (Sandbox Code Playgroud)
和这样的训练师:
trainer = Trainer(
tokenizer=tokenizer,
model=model,
args=training_args,
train_dataset=train,
eval_dataset=dev,
compute_metrics=compute_metrics
)
Run Code Online (Sandbox Code Playgroud)
我试过将padding和truncation参数放在分词器、训练器和training_args 中。什么都不做。任何的想法?
如何使用SQLite3在php中创建新数据库?
$db = new SQLite3($dbname);
只是打开,但我想创建,如果不存在.
谢谢你的帮助.
我正在尝试将2个大型csv加载到nodejs中,第一个的大小为257597 ko,第二个的大小为104330 ko。我正在使用文件系统(fs)和csv模块,这是我的代码:
fs.readFile('path/to/my/file.csv', (err, data) => {
if (err) console.err(err)
else {
csv.parse(data, (err, dataParsed) => {
if (err) console.err(err)
else {
myData = dataParsed
console.log('csv loaded')
}
})
}
})
Run Code Online (Sandbox Code Playgroud)
经过一段时间(1-2小时)后,它只是崩溃并显示以下错误消息:
<--- Last few GCs --->
[1472:0000000000466170] 4366473 ms: Mark-sweep 3935.2 (4007.3) -> 3935.2 (4007.
3) MB, 5584.4 / 0.0 ms last resort GC in old space requested
[1472:0000000000466170] 4371668 ms: Mark-sweep 3935.2 (4007.3) -> 3935.2 (4007.
3) MB, 5194.3 / 0.0 ms last resort GC in old …Run Code Online (Sandbox Code Playgroud) 在 85 个 epoch 之后,我的模型(具有 3 个 LSTM 层的 RNN)的损失(余弦距离)变为 NaN。为什么会发生这种情况,我该如何解决?我的模型的输出也变成 NaN。
我的模型:
tf.reset_default_graph()
seqlen = tf.placeholder(tf.int32, [None])
x_id = tf.placeholder(tf.int32, [None, None])
y_id = tf.placeholder(tf.int32, [None, None])
embeddings_matrix = tf.placeholder(np.float32, [vocabulary_size, embedding_size])
x_emb = tf.nn.embedding_lookup(embeddings_matrix, x_id)
y_emb = tf.nn.embedding_lookup(embeddings_matrix, y_id)
cells = [tf.contrib.rnn.LSTMCell(s, activation=a) for s, a in [(400, tf.nn.relu), (400, tf.nn.relu), (400, tf.nn.tanh)]]
cell = tf.contrib.rnn.MultiRNNCell(cells)
outputs, _ = tf.nn.dynamic_rnn(cell, x_emb, dtype=tf.float32, sequence_length=seqlen)
loss = tf.losses.cosine_distance(tf.nn.l2_normalize(outputs, 2), tf.nn.l2_normalize(y_emb, 2), 1)
tf.summary.scalar('loss', loss)
opt = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
merged = tf.summary.merge_all() …Run Code Online (Sandbox Code Playgroud) 我有一个返回 JSON 的 php 脚本和一个解析此 JSON 的 js 函数。在我的 php 中,我做了一个 htmlspecialchars 但当我在网页中显示值时,'不会被“相同”替换"
?
我在Ruby on Rails上有语法错误,我似乎无法解决它:
/home/francois/.rvm/gems/ruby-2.2.2@global/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:419:in `eval_block': /home/francois/.rvm/gems/ruby-2.2.2@global/gems/actionpack-4.2.0/lib/action_dispatch/routing/mapper.rb:124: syntax error, unexpected ')', expecting => (SyntaxError)
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:439:in `block in clear!'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:439:in `each'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:439:in `clear!'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:35:in `block in clear!'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:33:in `each'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:33:in `clear!'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:15:in `reload!'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:26:in `block in updater'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/activesupport-4.2.0/lib/active_support/file_update_checker.rb:75:in `call'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/activesupport-4.2.0/lib/active_support/file_update_checker.rb:75:in `execute'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:27:in `updater'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/routes_reloader.rb:7:in `execute_if_updated'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/application/finisher.rb:69:in `block in <module:Finisher>'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
from /home/francois/.rvm/gems/ruby-2.2.2@global/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
from /home/francois/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/tsort.rb:226:in `block in tsort_each'
from /home/francois/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/tsort.rb:348:in `block (2 …Run Code Online (Sandbox Code Playgroud)