【发布时间】:2023-11-03 05:47:01
【问题描述】:
我在张量流中训练了一个 LSTM 模型,我想根据它预测新数据。但是,我不断收到一个我无法理解的错误:
这是模型:
def __init__(self , snapshot_dir, save_dir ):
self.save_dir = save_dir
self.snapshot_dir = snapshot_dir
self.learning_rate = params["learning_rate"]
self.training_steps = params["training_steps"]
self.batch_size = params["batch_size"]
self.display_step = params["display_step"]
self.num_input = params["num_input"]
self.timesteps = params["timesteps"]
self.num_hidden = params["num_hidden"]
self.num_classes = params["num_classes"]
self.define_graph()
def define_graph(self):
self.X = tf.placeholder("float", [None, self.timesteps, self.num_input], name="X")
self.Y = tf.placeholder("float", [None, self.num_classes], name="Y")
self.weights = {'out': tf.Variable(tf.random_normal([self.num_hidden, self.num_classes]))}
self.biases = {'out': tf.Variable(tf.random_normal([self.num_classes]))}
def RNN(self):
x = tf.unstack(self.X, self.timesteps, 1)
lstm_cell = rnn.BasicLSTMCell(self.num_hidden, forget_bias=1.0, reuse=tf.get_variable_scope().reuse)
outputs, states = rnn.static_rnn(lstm_cell, x , dtype=tf.float32)
return tf.matmul(outputs[-1], self.weights['out']) + self.biases['out']
def run(self, X_train, y_train):
logits = self.RNN()
self.prediction = tf.nn.softmax(logits, name="prediction")
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
logits=logits, labels=self.Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=self.learning_rate)
train_op = optimizer.minimize(loss_op)
correct_pred = tf.equal(tf.argmax(self.prediction, 1), tf.argmax(self.Y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
saver = tf.train.Saver()
for step in range(1, self.training_steps + 1):
start_idx = random.randint(0, len(X_train) - self.timesteps - 1)
batch_x = self.generate_x_batch_data(start_idx, X_train, self.batch_size)
batch_y = self.generate_y_batch_data(start_idx, y_train, self.batch_size)
sess.run(train_op, feed_dict={self.X: batch_x, self.Y: batch_y})
saver.save(sess, self.save_dir, global_step=step)
还有预测部分:
sess = tf.Session()
saver = tf.train.import_meta_graph("{}.meta".format(self.newest_snapshot))
saver.restore(sess, self.newest_snapshot)
X_as_batch = self.aux.generate_x_batch_data(0,X, len(X))
pred = tf.get_default_graph().get_operation_by_name("prediction").outputs[0]
feed_dict = {tf.get_default_graph().get_operation_by_name('X').outputs[0]: X_as_batch}
prediction = sess.run(pred,
feed_dict=feed_dict)
X_as_batch 的形状与pred 预期的一样(它的形状是[5126, 60, 39],pred 的形状是[?, 60, 39])
但我得到了错误
InvalidArgumentError(参见上面的回溯):您必须输入一个值 对于具有 dtype 浮点数和形状 [?,1024]
的占位符张量“X_1” [[节点:X_1 = Placeholderdtype=DT_FLOAT, shape=[?,1024], _device="/job:localhost/replica:0/task:0/cpu:0"]]
可能是什么原因?
【问题讨论】:
-
向我们展示您的模型
-
@Maxim 在原帖中添加
-
占位符仍然丢失。试试
graph.get_tensor_by_name("X:0")和graph.get_tensor_by_name("prediction:2") -
@Maxim 抱歉,已添加
-
这里让我感到困惑的是,错误消息是关于
X_1,而不是X。这暗示在某处还有一个X
标签: python tensorflow machine-learning deep-learning prediction