AttributeError: объект 'tuple' не имеет атрибута 'ndims', в то время как используется режим исполнения tenorflow eager - PullRequest
0 голосов
/ 18 января 2019

Я использую режим ожидания и пытаюсь создать модель GAN. Чтобы сделать это, я создал класс следующим образом. Я пытался отправить массив специально, обнаружил в проблемах keras, но это также не сработало?

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

Теперь, используя следующий скрипт:

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)}

Я получаю следующую ошибку

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

пожалуйста, если кто-то может помочь.

1 Ответ

0 голосов
/ 19 января 2019

Обратите внимание, что вход модели должен быть тензорным, поэтому запуск модели будет выглядеть так:

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)

В сообщении об ошибке говорится, что массив numpy не имеет атрибута xxx.shape.ndims.

Эксперимент:

  1. Доступ к xxx.shape.ndims массива numpy по noise.shape.ndims:

Traceback (последний последний вызов):

Файл "", строка 1, в noise.shape.ndims

AttributeError: объект 'tuple' не имеет атрибута 'ndims'

  1. Доступ xxx.shape.ndims тензора по noise_tensor.shape.ndims:

2

...