把tensor转为numpy,如何将张量转换为numpy数组

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!')

你可能感兴趣的:(把tensor转为numpy)