#python-3.x #tensorflow
#python-3.x #tensorflow
Вопрос:
Когда я сохранил свою модель tensorflow и восстановил ее, у нее переменные неправильной формы, и я не могу понять почему.
вот мой код:
import os
import tensorflow as tf
X = tf.placeholder(tf.float32, shape=[None, 2], name="X")
Y = tf.placeholder(tf.float32, shape=[None, 1], name="Y")
W = tf.Variable(tf.random_normal([2, 1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")
hypo = tf.sigmoid(tf.matmul(X, W) b)
cost = -tf.reduce_mean(Y*(tf.log*(hypo)) (1-Y)*(tf.log(1-hypo)))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-3)
train = optimizer.minimize(cost)
#### Saving model
SAVER_DIR = "model"
saver = tf.train.Saver()
checkpoint_path = os.path.join(SAVER_DIR, "model")
ckpt = tf.train.get_checkpoint_state(SAVER_DIR)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(2001):
cost_val, hy_val, _ = sess.run([cost, hypo, train], feed_dict={X:x_dat, Y=y_dat})
saver.save(sess, checkpoint_path, global_step=step)
Входные данные «x_dat» состоят из двух столбцов, а «y_dat» — из одного столбца.
Я создал заполнитель в форме [?, 2] «X», а переменную [2, 1] «W».
После этого я восстановил модель и проверил форму с помощью этого кода:
#### Restoring model
sess = tf.Session()
sess.run(tf.global_variables_initializer())
saver = tf.train.import_meta_graph('./model/model-2000.meta')
saver.restore(sess,'./model/model-2000')
op = sess.graph.get_operations()
for m in op :
print(m.values())
Результат:
(<tf.Tensor 'X:0' shape=(?, 1) dtpye=float32>,)
(<tf.Tensor 'Y:0' shape=(?, 1) dtpye=float32>,)
...
(<tf.Tensor 'weight:0' shape=(1, 1) dtpye=float32_ref>,)
...
(<tf.Tensor 'bias:0' shape=(1,) dtpye=float32_ref>,)
Почему тензор X и веса имеют другую форму по сравнению с моделью, которую я сохранил?
И как я могу использовать входные данные в виде двух столбцов об этой восстановленной модели?