【发布时间】:2022-01-23 07:45:02
【问题描述】:
我正在训练一个基于 CNN 的模型,该模型适用于时间序列,并且应该将评估的时间序列分为 3 类 (0,1,2)。在训练期间,我能够达到非常高的准确度。通过在培训课程结束时提供测试数据集,我可以获得以下图表:
我用来训练和保存模型的代码如下:
sess = tf1.Session()
saver = tf1.train.Saver()
sess.run(tf1.global_variables_initializer())
for epoch in range(0,epochs):
step = 0
l = 0.0
val_acc = 0
np.random.shuffle(TRAIN)
for x,y in TRAIN:
feed_dict = {self.net.input_tensor: x, self.label: y}
_, compute_loss,comp_acc = sess.run([train_op, loss,accuracy], feed_dict=feed_dict)
l += compute_loss
val_acc += comp_acc
if step%100 == 0:
#print(compute_loss,comp_acc)
print('train step = %d,loss = %f,accuracy = %f'%(step, l/step, val_acc/step))
step += 1
val_acc = 0
val_step = 0
for x,y in TEST:
feed_dict = {self.net.input_tensor: x, self.label: y}
compute_accuracy = sess.run(accuracy, feed_dict=feed_dict)
val_acc += compute_accuracy
val_step += 1
print("Validation set accuracy: %s" % str(val_acc/val_step))
saver.save(sess, './model_v1/demo2/infer2')
P = tf1.argmax(self.pred,1)
evaluate(TX,TY,sess,self.net.input_tensor,P) # generates the plot, with input TX,TY
但是,当我恢复会话时,模型将生成一个完全不同的图,给定相同的输入 TX,TY:
我确保在从文件系统加载会话时不运行 global_variables_initializer,因为权重应该来自恢复,而且当我恢复时我启动了一个新程序,但它仍然无法正常工作:
with tf1.compat.v1.Session() as sess:
saver = tf1.compat.v1.train.import_meta_graph(r'./model_v1/demo2/infer2.meta')
saver.restore(sess,r'./model_v1/demo2/infer2')
graph = sess.graph
inpt = graph.get_tensor_by_name('net_input:0') #name of the input placeholder
output = graph.get_tensor_by_name('net_output:0') #name of the network output
output = tf1.argmax(output, axis=1)
evaluate(TX,TY,sess, inpt,output)
网络定义如下:
def build_net_graph(self):
self.input_tensor = tf1.placeholder(tf1.float32, [None, self.time_step, self.senor_data_num],name='net_input')
#dense
input_x = tf1.reshape(self.input_tensor, [-1, self.senor_data_num])
weights_x = self._get_variable_weights([self.senor_data_num, self.num_units],"inputx_w")
biases_x = self._get_variable_biases([self.num_units],"inputx_b")
x_mul = tf1.matmul(input_x, weights_x)
x_output = tf1.reshape(tf1.add(x_mul, biases_x),[-1, self.time_step, self.num_units])
#hidden layers
weights_outputs = self._get_variable_weights([avg_output.shape[1], self.class_num],"outputx_w")
print("wo",weights_outputs.shape)
biases_outputs = self._get_variable_biases([self.class_num],"outputx_b")
m = tf1.matmul(hidden_layers_output, weights_outputs)
a = tf1.add(m, biases_outputs)
a = tf1.nn.softmax(a,name='net_output')
return a
任何人都可以就正在发生的事情提供一些帮助吗?
【问题讨论】:
标签: tensorflow