我正在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) 我正在使用几个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) 我正在研究一种复发语言模型.要学习可用于初始化我的语言模型的单词嵌入,我使用的是gensim的word2vec模型.训练之后,word2vec模型为词汇表中的每个单词保存两个向量:单词嵌入(输入/隐藏矩阵的行)和上下文嵌入(隐藏/输出矩阵的列).
作为概括这个帖子有这两个嵌入矢量组合至少三种常用的方法:
但是,我找不到关于最佳策略的适当论文或报告.所以我的问题是:
相关(但未答复)的问题:
我想建立一个语言建模模型,它应该预测句子中的下一个单词,给出前一个单词和/或前一个单词.
使用案例:我想自动编写报告.所以模型应该自动完成我写的句子.因此,重要的是名词和句子开头的单词大写.
数据:数据采用德语,包含许多技术术语.
我的文本语料库是德语,我目前正在进行预处理.因为我的模型应该预测格式正确的句子我决定使用/不使用以下预处理步骤:
没有词形还原
用NUMBER替换所有带有数字的表达式
但是,我不确定是否将语料库转换为小写.在网上搜索时,我发现了不同的意见.虽然较低的套管很常见,但它会导致我的模型错误地预测名词的大写,句子的开头等.
我还发现了在下一个斯坦福页面上只将句子开头的单词转换为小写的想法.
这个用例的最佳策略是什么?我应该将文本转换为小写并在预测后将单词更改为正确的大小写吗?我应该按原样离开大写吗?我应该只在句子开头小写单词吗?
非常感谢任何建议和经验!
我正在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?
tensorflow ×3
keras ×2
nlp ×2
python ×2
callback ×1
gensim ×1
lstm ×1
nltk ×1
tensorboard ×1
word2vec ×1