小编Lem*_*mon的帖子

创建keras回调以在培训期间保存每个批次的模型预测和目标

我正在Keras(tensorflow后端)构建一个简单的Sequential模型.在培训期间,我想检查各个培训批次和模型预测.因此,我正在尝试创建一个自定义Callback,以保存每个培训批次的模型预测和目标.但是,该模型不使用当前批次进行预测,而是使用整个训练数据.

我怎样才能将当前的培训批次交给Callback

我如何访问Callbackself.predhis和self.targets中保存的批次和目标?

我当前的版本如下:

callback_list = [prediction_history((self.x_train, self.y_train))]

self.model.fit(self.x_train, self.y_train, batch_size=self.batch_size, epochs=self.n_epochs, validation_data=(self.x_val, self.y_val), callbacks=callback_list)

class prediction_history(keras.callbacks.Callback):
    def __init__(self, train_data):
        self.train_data = train_data
        self.predhis = []
        self.targets = []

    def on_batch_end(self, epoch, logs={}):
        x_train, y_train = self.train_data
        self.targets.append(y_train)
        prediction = self.model.predict(x_train)
        self.predhis.append(prediction)
        tf.logging.info("Prediction shape: {}".format(prediction.shape))
        tf.logging.info("Targets shape: {}".format(y_train.shape))
Run Code Online (Sandbox Code Playgroud)

callback keras tensorflow

17
推荐指数
2
解决办法
9139
查看次数

Tensorboard - 可视化LSTM的权重

我正在使用几个LSTM层来形成深度递归神经网络.我想在训练期间监控每个LSTM层的权重.但是,我无法找到如何将LSTM图层权重的摘要附加到TensorBoard.

有什么建议可以做到这一点?

代码如下:

cells = []

with tf.name_scope("cell_1"):
    cell1 = tf.contrib.rnn.LSTMCell(self.embd_size, state_is_tuple=True, initializer=self.initializer)
    cell1 = tf.contrib.rnn.DropoutWrapper(cell1,
                input_keep_prob=self.input_dropout,
                output_keep_prob=self.output_dropout,
                state_keep_prob=self.recurrent_dropout)
    cells.append(cell1)

with tf.name_scope("cell_2"):
    cell2 = tf.contrib.rnn.LSTMCell(self.n_hidden, state_is_tuple=True, initializer=self.initializer)
    cell2 = tf.contrib.rnn.DropoutWrapper(cell2,
                output_keep_prob=self.output_dropout,
                state_keep_prob=self.recurrent_dropout)
    cells.append(cell2)

with tf.name_scope("cell_3"):
    cell3 = tf.contrib.rnn.LSTMCell(self.embd_size, state_is_tuple=True, initializer=self.initializer)
    # cell has no input dropout since previous cell already has output dropout
    cell3 = tf.contrib.rnn.DropoutWrapper(cell3,
                output_keep_prob=self.output_dropout,
                state_keep_prob=self.recurrent_dropout)
    cells.append(cell3)

cell = tf.contrib.rnn.MultiRNNCell(
    cells, state_is_tuple=True)

output, self.final_state = tf.nn.dynamic_rnn(
    cell,
    inputs=self.inputs,
    initial_state=self.init_state)
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorboard

8
推荐指数
1
解决办法
3416
查看次数

word2vec - 什么是最好的?添加,连接或平均单词向量?

我正在研究一种复发语言模型.要学习可用于初始化我的语言模型的单词嵌入,我使用的是gensim的word2vec模型.训练之后,word2vec模型为词汇表中的每个单词保存两个向量:单词嵌入(输入/隐藏矩阵的行)和上下文嵌入(隐藏/输出矩阵的列).

作为概括这个帖子有这两个嵌入矢量组合至少三种常用的方法:

  1. 总结每个单词的上下文和单词向量
  2. 求和和求平均值
  3. 连接上下文和单词向量

但是,我找不到关于最佳策略的适当论文或报告.所以我的问题是:

  1. 是否对向量求和,平均或连接有共同的解决方案吗?
  2. 或者最好的方法完全取决于相关任务?如果是这样,什么策略最适合单词级语言模型?
  3. 为什么要结合载体?为什么不对每个单词使用"原始"单词嵌入,即包含在输入和隐藏神经元之间的权重矩阵中的单词嵌入.

相关(但未答复)的问题:

python gensim word2vec language-model word-embedding

6
推荐指数
1
解决办法
7634
查看次数

NLP - 在预处理期间何时小写文本

我想建立一个语言建模模型,它应该预测句子中的下一个单词,给出前一个单词和/或前一个单词.

使用案例:我想自动编写报告.所以模型应该自动完成我写的句子.因此,重要的是名词和句子开头的单词大写.

数据:数据采用德语,包含许多技术术语.

我的文本语料库是德语,我目前正在进行预处理.因为我的模型应该预测格式正确的句子我决定使用/不使用以下预处理步骤:

  • 没有禁止删除
  • 没有词形还原

  • 用NUMBER替换所有带有数字的表达式

  • 同义词和缩写的规范化
  • 用RARE替换罕见的单词

但是,我不确定是否将语料库转换为小写.在网上搜索时,我发现了不同的意见.虽然较低的套管很常见,但它会导致我的模型错误地预测名词的大写,句子的开头等.

我还发现了在下一个斯坦福页面上只将句子开头的单词转换为小写的想法.

这个用例的最佳策略是什么?我应该将文本转换为小写并在预测后将单词更改为正确的大小写吗?我应该按原样离开大写吗?我应该只在句子开头小写单词吗?

非常感谢任何建议和经验!

python nlp machine-learning nltk

5
推荐指数
1
解决办法
3355
查看次数

Keras-如何获取非标准化的logit而不是概率

我正在Keras中创建一个模型,并想计算自己的指标(困惑度)。这需要使用非标准化的概率/对数。但是,keras模型仅返回softmax概率:

model = Sequential()
model.add(embedding_layer)
model.add(LSTM(n_hidden, return_sequences=False))
model.add(Dropout(dropout_keep_prob))
model.add(Dense(vocab_size))
model.add(Activation('softmax'))
optimizer = RMSprop(lr=self.lr)

model.compile(optimizer=optimizer, 
loss='sparse_categorical_crossentropy')
Run Code Online (Sandbox Code Playgroud)

Keras常见问题解答提供了一种在此处获取中间层输出的解决方案。这里给出另一个解决方案。但是,这些答案将中间输出存储在其他模型中,这不是我所需要的。我想将logits用于我的自定义指标。自定义指标应包含在model.compile()函数中,以便在训练过程中对其进行评估和显示。因此,我不需要Dense在不同模型中分隔层的输出,而将其作为原始模型的一部分。

简而言之,我的问题是:

  • 当定义所概述自定义指标在这里使用def custom_metric(y_true, y_pred),并在y_pred含有logits或标准化的概率?

  • 如果它包含归一化的概率,如何获得未归一化的概率,即该层输出的logits Dense

nlp keras

4
推荐指数
1
解决办法
3029
查看次数

tensorflow - 如何正确使用变分循环辍学

tensorflow配置dropout包装器具有三种不同的 dropout概率可以设置:input_keep_prob, output_keep_prob, state_keep_prob.

我想通过将variational_recurrent参数设置为 true 来为我的 LSTM 单元使用变分 dropout 。但是,我不知道必须使用三个 dropout 概率中的哪一个才能使变分 dropout 正常运行。

有人可以提供帮助吗?

lstm tensorflow recurrent-neural-network

2
推荐指数
1
解决办法
2525
查看次数