Jacob Williams
Jacob Williams

Reputation: 1

Initialize tensor Variable to numpyArray - Reduced Sum Issues

I am pre-processing a numpy array and want to enter it in as a tensorflow Variable. I've tried following other stack exchange advice, but so far without success. I would like to see if I'm doing something uniquely wrong here.

  npW = np.zeros((784,10))
  npW[0,0] = 20
  W = tf.Variable(tf.convert_to_tensor(npW, dtype = tf.float32))

  sess = tf.InteractiveSession()
  tf.global_variables_initializer().run()

  print("npsum", np.sum(npW))
  print(tf.reduce_sum(W))

And this is the result.

npsum 20.0
Tensor("Sum:0", shape=(), dtype=float32)

I don't know why the reduced sum of the W variable remains zero. Am i missing something here?

Upvotes: 0

Views: 405

Answers (2)

Lescurel
Lescurel

Reputation: 11651

You need to understand that Tensorflow differs from traditionnal computing. First, you declare a computational graph. Then, you run operations through the graph.

Taking your example, you have your numpy variables :

npW = np.zeros((784,10))
npW[0,0] = 20

Next, these instructions are a definition of tensorflow variables, i.e. nodes in the computational graph:

W = tf.Variable(tf.convert_to_tensor(npW, dtype = tf.float32))
sum = tf.reduce_sum(W)

And to be able to compute the operation, you need to run the op through the graph, with a sesssion, i.e. :

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
result = sess.run(sum)
print(result) # print 20

Another way is to call eval instead of sess.run()

print(sum.eval()) # print 20

Upvotes: 1

Jacob Williams
Jacob Williams

Reputation: 1

So i tested it a bit differently and found out that the variable is getting assigned properly, but, the reduced_sum function isn't working as expected. If any one has explanations on that it would be much appreciated.

  npW = np.zeros((2,2))
  npW[0,0] = 20
  W = tf.Variable(npW, dtype = tf.float32)
  A= tf.constant([[20,0],[0,0]])
  sess = tf.InteractiveSession()
  tf.global_variables_initializer().run()
  # Train
  print("npsum", np.sum(npW))

  x=tf.reduce_sum(W,0)
  print(x)
  print(tf.reduce_sum(A))
  print(W.eval())
  print(A.eval())

This had output

npsum 20.0                                                                         
Tensor("Sum:0", shape=(2,), dtype=float32)                                         
Tensor("Sum_1:0", shape=(), dtype=int32)                                           
[[ 20.   0.],                                                                        
[  0.   0.]]                                                                      
[[20  0],                                                                            
[ 0  0]]  

Upvotes: 0

Related Questions