2

I am using tf eager mode, and trying to create a GAN model. To made this, i created a class as follows. I tried sending array specificly, found in keras issues, but that also didn't worked?

class vanillaGAN(tf.keras.Model):
    """Vanilla GAN"""
    def __init__(self, noise_dims, input_dims):
        """Define all layer used in network"""
        super(vanillaGAN, self).__init__()
        self.disc1 = tf.keras.layers.Dense(128, activation='relu')
        self.disc2 = tf.keras.layers.Dense(1)#, activation='sigmoid')

        self.gen1 = tf.keras.layers.Dense(128, activation='relu')
        self.gen2 = tf.keras.layers.Dense(784)#, activation='sigmoid')

    def gen_forward(self, x):
        """Forward Pass for Generator"""
        x = self.gen1(x)
        x = self.gen2(x)
        return x

    def dis_forward(self, x):
        """Forward Pass for Discriminator"""
        x = self.disc1(x)
        x = self.disc2(x)
        return x

Now, on using following script:

def sample(batch_size, dims):
    return np.random.uniform(size=(batch_size, dims))

gan = vanillaGAN(noise_dims=40, input_dims=784)

noise = sample(32,40)
#gan.gen_forward(np.array(noise))
gan.gen_forward(noise)}

I am getting following error

----------------------------------------------------------------------
AttributeError                       Traceback (most recent call last)
<ipython-input-43-11c01bb2233d> in <module>
      1 noise = sample(32,40)
----> 2 gan.gen_forward(np.array(noise))

<ipython-input-20-22ce18fda8ff> in gen_forward(self, x)
     12     def gen_forward(self, x):
     13         """Forward Pass for Generator"""
---> 14         x = self.gen1(x)
     15         x = self.gen2(x)
     16         return x

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
    728 
    729         # Check input assumptions set before layer building, e.g. input rank.
--> 730         self._assert_input_compatibility(inputs)
    731         if input_list and self._dtype is None:
    732           try:

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py in _assert_input_compatibility(self, inputs)
   1461           spec.min_ndim is not None or
   1462           spec.max_ndim is not None):
-> 1463         if x.shape.ndims is None:
   1464           raise ValueError('Input ' + str(input_index) + ' of layer ' +
   1465                            self.name + ' is incompatible with the layer: '

AttributeError: 'tuple' object has no attribute 'ndims'

please, if someone can help.

4
  • What exactly happens if you use the commented line gan.gen_forward(np.array(noise)) instead? And also, what's the result of print(noise)? Commented Jan 18, 2019 at 9:28
  • Same error, infact this error is for that commented line , i forgot to change it. Commented Jan 18, 2019 at 9:30
  • And what about the print(noise) otput? Commented Jan 18, 2019 at 9:32
  • It is numpy array with desired shape. I guess error is somewhere in the class model. Commented Jan 18, 2019 at 9:37

1 Answer 1

2

Note that the model input should be a tensor, so running a model would be like:

gan = vanillaGAN(noise_dims=40, input_dims=784)

noise = sample(32,40)

# define the tensors
noise_tensor = tf.placeholder(tf.float32, shape=[32,40])
gen_output = gan.gen_forward(noise_tensor)
dis_output = gan.dis_forward(noise_tensor)

# define the initializer
# Ref: https://stackoverflow.com/questions/45139423/tensorflow-error-failedpeconditionerror-attempting-to-use-uninitialized-variab
init = tf.global_variables_initializer() 

# run the graph
with tf.Session() as sess:
    sess.run(init)

    gen_output = sess.run(gen_output, feed_dict = {noise_tensor:noise})
    dis_output = sess.run(dis_output, feed_dict = {noise_tensor:noise})

    print(gen_output.shape)
    print(dis_output.shape)

The error message is saying that numpy array doesn't have the attribute xxx.shape.ndims.

Experiment:

  1. Access xxx.shape.ndims of a numpy array by noise.shape.ndims:

Traceback (most recent call last):

File "", line 1, in noise.shape.ndims

AttributeError: 'tuple' object has no attribute 'ndims'

  1. Access xxx.shape.ndims of a tensor by noise_tensor.shape.ndims:

2

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.