После того, как модель обучена тензорному потоку, я хочу загрузить обученную модель, используя класс заставки.Этот код делает ошибку или работает нормально или работает неправильно, когда я активирую или деактивирую tf.reset_default_graph()
.Я не знаю, почему это происходит, и, пожалуйста, дайте мне знать, как решить эту проблему.
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
def shuffle_data(x_train, y_train):
temp_index = np.arange(len(x_train))
np.random.shuffle(temp_index)
x_temp = np.zeros(x_train.shape)
y_temp = np.zeros(y_train.shape)
x_temp = x_train[temp_index]
y_temp = y_train[temp_index]
return x_temp, y_temp
def main():
num_points = 2000
vectors_set = []
for i in range(num_points):
x1=np.random.normal(0,1.0)
y1=np.sin(x1)+np.random.normal(0.,0.1)
vectors_set.append([x1,y1])
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
plt.plot(x_data, y_data, 'go')
plt.legend("t")
plt.show()
BATCH_SIZE = 100
BATCH_NUM = int(len(x_data)/BATCH_SIZE)
x_data = np.reshape(x_data, [len(x_data),1])
y_data = np.reshape(y_data, [len(y_data),1])
input_data = tf.placeholder(tf.float32, shape = [None,1])
output_data = tf.placeholder(tf.float32, shape = [None,1])
W1 = tf.Variable(tf.random_uniform([1,5],-1.0,1.0),name="w1")
W2 = tf.Variable(tf.random_uniform([5,3],-1.0,1.0),name="w2")
W_out = tf.Variable(tf.random_uniform([3,1],-1.0,1.0),name="wo")
hidden1=tf.nn.sigmoid(tf.matmul(input_data,W1))
hidden2=tf.nn.sigmoid(tf.matmul(hidden1,W2))
output = tf.matmul(hidden2, W_out, name="output")
loss=tf.reduce_mean(tf.square(output-output_data))
optimizer = tf.train.AdamOptimizer(0.01)
train=optimizer.minimize(loss)
init = tf.global_variables_initializer()
saver = tf.train.Saver()
sess = tf.Session()
ckpt=tf.train.get_checkpoint_state("tmp")
if(ckpt!=None) and tf.train.checkpoint_exists(ckpt.model_checkpoint_path):
print("varaible is restored")
tf.reset_default_graph()
print(ckpt.model_checkpoint_path)
saver.restore(sess, ckpt.model_checkpoint_path)
else:
print("failed to restor. init graph")
sess.run(init)
for step in range(num_points+1):
index = 0
x_data, y_data = shuffle_data(x_data, y_data)
for batch_iter in range(BATCH_NUM-1):
feed_dict = {input_data: x_data[index:index+BATCH_SIZE],
output_data:y_data[index:index+BATCH_SIZE]}
sess.run(train, feed_dict = feed_dict)
index += BATCH_SIZE
if (step%1000==0):
print("Step=%5d, Loss Value = %f" %(step, sess.run(loss, feed_dict = feed_dict)))
save_path = saver.save(sess, "tmp/train", global_step=step)
print("Model saved in file: %s" % save_path)
feed_dict = {input_data: x_data}
plt.plot(x_data, y_data, 'go')
plt.plot(x_data, sess.run(output, feed_dict=feed_dict), 'k*')
plt.xlabel('x')
plt.xlim(-4,3)
plt.ylabel('y')
plt.ylim(-1.5, 1.5)
plt.legend("f")
plt.show()
if __name__ == "__main__":
main()