这里是一个屏幕截图的准确性和损失随着时间的推移。我们可以看到,这些值在开始时几乎是相同的,然后变得不同。
我想知道哪里可能出错,或者至少知道代码的调试部分。最后,请注意,通过out训练,我将把最后一个隐藏状态反馈到每个批次的初始状态。如下:
new_state_train_py=sess.run(initiale_state_train)
对于范围内的i(num_迭代次数):
_,summary_t,new_state_train_py=sess.run([训练步骤,summary_train,new_state_train],
feed_dict=train_x_ph:train_x[:,i*时间步数:(i+1)*时间步数,:],
列车速度:列车速度[:,i*时间步数:(i+1)*时间步数,:]
初始状态训练:新状态训练
训练编写器。添加摘要(摘要,epoch*num_iterations+i)
< /代码>
到目前为止,我所知道的是,主要问题应该在模型定义中,因为这个定义了整个模型中的任何随机性,这就是使同一个模型的不同运行之间的预测不同的原因。如果我弄错了,请纠正我。
调试后,我注意到,当我将图表中每个op的数据类型更改为tf.float64时,我发现两条曲线完全相交,除了在结尾处,曲线中还有一个细微的变化。是什么导致了这种行为?
非常感谢您的帮助!!TensorFlow中的种子通过:tf.set_random_seed(mseed)
,我创建了一个初始值设定项,如下所示:kernel_initializer = tf.glorot_normal_initializer(seed=mseed)
后来我通过了LSTM
细胞。因此模型如下:
import tensorflow as tf
import numpy as np
def lstm_model(lstm_model(inputs, cell_size1, kernel_initializer, m_dtype, dropout, is_training, use_peepholes, mseed, num_classes):
with tf.variable_scope('lstm_model'):
cell = tf.nn.rnn_cell.LSTMCell(cell_size1, initializer=kernel_initializer)
initial_state = cell.zero_state(34 if is_training else 14, dtype=tf.float32)
output, new_state = tf.nn.dynamic_rnn(cell, inputs, dtype=m_dtype, initial_state=initial_state)
with tf.variable_scope("output"):
output = tf.reshape(output, shape=[-1, cell_size1])
output = tf.layers.dense(output, units=num_classes,
kernel_initializer=kernel_initializer)
if is_training:
output = tf.reshape(output, shape=[34, -1, num_classes])
else:
output = tf.reshape(output, shape=[14, -1, num_classes])
return output, new_state, initial_state, model_summary
def model(inputs..., mseed, kernel_initializer, reuse=False):
with tf.variable_scope('model', reuse=reuse):
output, new_state, initial_state, model_summary = lstm_model(inputs, num_units,
kernel_initializer,
tf.float32, dropout, not reuse, True,
mseed, num_classes=num_classes)
# Now I calculate the loss and used an optimizer in case of training...
return output, new_state, initial_state, model_summary
mseed = 123
seed(mseed)
tf.set_random_seed(mseed)
kernel_initializer = tf.glorot_normal_initializer(seed=mseed)
# here I loaded the data as numpy arrays...
# Here I created the placeholders...
# t for train, and d for development
output_t, new_state_t, init_state_t = model(inputs_t..., mseed, kernel_initializer, reuse=False)
output_d, new_state_d, init_state_d = model(inputs_d..., mseed, kernel_initializer, reuse=True)
train_model()...
因此,代码被总结为只包含其中的重要部分。
现在,即使在设置随机种子并使用mseed
当创建内核时,我不能复制相同的结果。
这里是一个屏幕截图的准确性和损失随着时间的推移。我们可以看到,这些值在开始时几乎是相同的,然后变得不同。
我想知道哪里可能出错,或者至少知道代码的调试部分。最后,请注意,通过out训练,我将把最后一个隐藏状态反馈到每个批次的初始状态。如下:
new_state_train_py = sess.run(initiale_state_train)
for i in range(num_iterations):
_, summary_t, new_state_train_py = sess.run([train_step, summary_train, new_state_train],
feed_dict={train_x_ph: train_x[:, i*time_steps: (i + 1) * time_steps, :],
train_y_ph: train_y[:, i*time_steps: (i + 1) * time_steps, :],
initiale_state_train: new_state_train_py})
train_writer.add_summary(summary_t, epoch * num_iterations + i)
到目前为止,我所知道的是,主要问题应该在模型定义中,因为这个定义了整个模型中的任何随机性,这就是使同一个模型的不同运行之间的预测不同的原因。如果我弄错了,请纠正我。
在调试之后,我注意到,当我将图中每个op的数据类型更改为tf.float64时,我发现两条曲线完全相交,除了在末尾,曲线中还有一个微小的变化。是什么导致了这种行为?
非常感谢您的帮助!!