Reshape TensorFlow Tensor Inside Keras Loss Function?
Solution 1:
Is there a proper way to reshape tensors...
If you are using Keras you should use the K.reshape(x,shape)
method, which is a wrapper for tf.reshape(x,shape)
as we can see in the docs.
I also notice you are using get_shape()
to obtain your tensor shape, when on Keras you can do this with K.int_shape(x)
as also mentioned in the docs, like this:
shape = K.int_shape(x_hat)
Besides that there are several other operations you do directly calling your Tensorflow import, instead of the Keras Backend (like tf.abs()
, tf.reduce_mean()
, tf.transpose()
, etc.). You should consider using its corresponding wrappers in the keras backend to have uniform notation and guarantee a more regular behaviour. Also, by using the Keras backend you are giving your program compatibility with both Theano and Tensorflow, so it is a big plus you should consider.
Additionally, some TypeError
may appear when working with tensors with undefined dimension(s). Please take a look at this question where they explain about reshaping tensors with undefined dimensions. Also, for its equivalent in Keras, check this other question, where in an answer I explain how to achieve that using Keras with Tensorflow as backend.
...Now regarding your code. Basically, as you have some undefined dimensions, you can pass the value -1 to have it infer the shape no matter what size it could be (it is explained in the first linked question, but can also be seen in the docs). Something like:
x = tf.reshape(x, [-1, image_size])
Or using Keras backend:
x = K.reshape(x, [-1, image_size])
Post a Comment for "Reshape TensorFlow Tensor Inside Keras Loss Function?"