I'm beginner of tensorflow. I made simple autoencoder with the help. I want to convert final decoded tensor to numpy array.I tried using .eval() but I could not work it. how can I convert tensor to numpy?
My input image size is 512*512*1 and data type is raw image format.
code
#input
image_size = 512
hidden = 256
input_image = np.fromfile('PATH',np.float32)
# Variables
x_placeholder = tf.placeholder("float", (image_size*image_size))
x = tf.reshape(x_placeholder, [image_size * image_size, 1])
w_enc = tf.Variable(tf.random_normal([hidden, image_size * image_size], mean=0.0, stddev=0.05))
w_dec = tf.Variable(tf.random_normal([image_size * image_size, hidden], mean=0.0, stddev=0.05))
b_enc = tf.Variable(tf.zeros([hidden, 1]))
b_dec = tf.Variable(tf.zeros([image_size * image_size, 1]))
#model
encoded = tf.sigmoid(tf.matmul(w_enc, x) + b_enc)
decoded = tf.sigmoid(tf.matmul(w_dec,encoded) + b_dec)
# Cost Function
cross_entropy = -1. * x * tf.log(decoded) - (1. - x) * tf.log(1. - decoded)
loss = tf.reduce_mean(cross_entropy)
train_step = tf.train.AdagradOptimizer(0.1).minimize(loss)
# Train
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print('Training...')
for _ in xrange(10):
loss_val, _ = sess.run([loss, train_step], feed_dict = {x_placeholder: input_image})
print loss_val
解决方案
You can add decoded to the list of tensors to be returned by sess.run(), as follows. decoded_val will by numpy array, and you can reshape it to get the original image shape.
Alternatively, you can do sess.run() outside of training loop to get the resulting decoded image.
import tensorflow as tf
import numpy as np
tf.reset_default_graph()
#load_image
image_size = 16
k = 64
temp = np.zeros((image_size, image_size))
# Variables
x_placeholder = tf.placeholder("float", (image_size, image_size))
x = tf.reshape(x_placeholder, [image_size * image_size, 1])
w_enc = tf.Variable(tf.random_normal([k, image_size * image_size], mean=0.0, stddev=0.05))
w_dec = tf.Variable(tf.random_normal([image_size * image_size, k], mean=0.0, stddev=0.05))
b_enc = tf.Variable(tf.zeros([k, 1]))
b_dec = tf.Variable(tf.zeros([image_size * image_size, 1]))
#model
encoded = tf.sigmoid(tf.matmul(w_enc, x) + b_enc)
decoded = tf.sigmoid(tf.matmul(w_dec,encoded) + b_dec)
# Cost Function
cross_entropy = -1. * x * tf.log(decoded) - (1. - x) * tf.log(1. - decoded)
loss = tf.reduce_mean(cross_entropy)
train_step = tf.train.AdagradOptimizer(0.1).minimize(loss)
# Train
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print('Training...')
for _ in xrange(10):
loss_val, decoded_val, _ = sess.run([loss, decoded, train_step], feed_dict = {x_placeholder: temp})
print loss_val
print('Done!')