【问题标题】:'str' object has no attribute 'base_dtype' error TensorFlow model“str”对象没有属性“base_dtype”错误TensorFlow模型
【发布时间】:2018-07-24 01:53:21
【问题描述】:

我正在 TensorFlow 中实现 Wasserstein DCGAN。 这是我的生成器模型:

w1 = tf.get_variable('w1', shape=[random_dim, 1024], dtype=tf.float32,
                             initializer=tf.contrib.layers.xavier_initializer())
b1 =  b1 = tf.get_variable('b1', shape=[1024], dtype=tf.float32,
                     initializer=tf.constant_initializer(1.0))
flat_conv1 = tf.add(tf.matmul(input , w1) , b1 , name = 'flat_conv1')
act1 = tf.nn.tanh(flat_conv1, name='act1')

dense1 = tf.layers.dense(bias_initializer=tf.ones_initializer(),inputs=act1, units=128*7*7, activation=tf.nn.tanh , kernel_initializer = tf.contrib.layers.xavier_initializer())
bn1 = tf.contrib.layers.batch_norm(dense1, is_training=is_train, epsilon=1e-5, decay = 0.9,  updates_collections=None, scope='bn1')
act2 = tf.nn.tanh(bn1, name='act1')

conv1 = tf.reshape(act2, shape=[-1,7,7,128], name='conv1')
up1 = tf.keras.layers.UpSampling2D(size = (2,2))

conv2 = tf.layers.conv2d(bias_initializer=tf.ones_initializer(),inputs=up1,filters=64,kernel_size=[5, 5],padding="same",activation=tf.nn.tanh , kernel_initializer = tf.contrib.layers.xavier_initializer())
up2 = tf.keras.layers.UpSampling2D(size = (2,2))
conv3 = tf.layers.conv2d(bias_initializer=tf.ones_initializer(),inputs=up2,filters =1,kernel_size=[5, 5],padding= "same",activation=tf.nn.tanh , kernel_initializer = tf.contrib.layers.xavier_initializer())

错误在 conv2 层,它说 - ''str' object has no attribute 'base_dtype' 我是 TensorFlow 的新手,不知道为什么会这样。 完整的源代码:https://github.com/tanmay-bhatnagar/W-DCGAN 从这里获得train函数:https://github.com/llSourcell/Pokemon_GAN/blob/master/pokeGAN.py

如果需要更多详细信息,请询问。

【问题讨论】:

  • inputs-参数到conv2d() 必须是张量。见 C. Park 的回答

标签: python tensorflow deep-learning keras conv-neural-network


【解决方案1】:

这样就可以了

up1 = tf.keras.layers.UpSampling2D(size = (2,2))(conv1)
up2 = tf.keras.layers.UpSampling2D(size = (2,2))(conv2)

【讨论】:

  • 完美运行。您能否解释一下添加(conv1)的变化。我在python中从未见过这样的函数调用。
  • @TammyBhatnager 第一个括号用于class(UpSampling2D) 实例化,第二个括号用于调用__call__() 实例的方法(在python中称为Callable Object)。 Keras 层(包括UpSampling2D)具有 __call__(input, **) 方法,该方法返回处理给定输入的包装器。
  • 您能否检查一下这里发生的另一个错误 -> stackoverflow.com/questions/48791793/…。如果要问的不是太多,请投票赞成我很少得到这些问题的问题。谢谢
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2018-02-08
  • 2018-03-15
  • 2019-03-30
相关资源
最近更新 更多