我在弄清楚如何构建Tensorflow模型代码时遇到了一些麻烦。我一直在遵循本网站上的指南:link。
然而,通过这种结构,我意识到我无法以这样的方式声明我的模型,即我可以在Model类的train()
方法中传递训练数据。
train()方法:
def train(self, data_x, data_y):
seq_length, longest_seq, data_x = Utils.padding(data_x)
n_inputs = np.array(data_x).shape[0]
self.x_placeholder_input = tf.placeholder(tf.float32, shape=[None, longest_seq, n_inputs])
self.y_placeholder_label = tf.placeholder(tf.int32, shape=[None, self.num_of_classes])
self.sq_placeholder_seq_length = tf.placeholder(tf.int32, shape=[None])
num_of_epoch = 100
with tf.Session() as sess:
for epoch in range(num_of_epoch):
# initialise all variables
sess.run(tf.global_variables_initializer())
sess.run(self.optimize(),
feed_dict={self.x_placeholder_input: data_x,
self.y_placeholder_label: data_y,
self.sq_placeholder_seq_length: seq_length})
if num_of_epoch % 10 == 0:
# Create Saver to save model
print "Cycle " + str(epoch) + " out of " + str(num_of_epoch) + " done"
saver = tf.train.Saver()
location = saver.save(sess, "saved_models/model")
print "Model saved to : " + str(location)
模型类的__init __()方法:
def __init__(self, num_of_classes):
# placeholders
self.x_placeholder_input
self.y_placeholder_label
self.sq_placeholder_seq_length
self.num_of_classes = num_of_classes
我最初的执行计划是在单独的 main.py 脚本中创建Model类的实例。之后取决于模式(预测/训练)。只有这样,我才会通过train()
将训练数据传递给模型。
由于training_data包含不同步骤的数据(文本文件),因此我需要数据才能确定占位符的形状。 (它类似于此示例的设置序列长度部分:link)
因此,在我当前的实现中,我被迫仅在选择模式(预测/训练)之后创建模型实例,我发现从训练切换时效率低 - >预测,预测 - >培训将创建多个模型实例。
我是在错误地构造代码还是我的原始执行计划不正常/传统?
模型类的当前完整代码(如果有帮助,如果需要更多,请告诉我):link