Python 训练元组对象的tensorflow数据集api输入没有ndims属性

Python 训练元组对象的tensorflow数据集api输入没有ndims属性,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,因此,我正在尝试使用新的TensorFlow数据集API来训练GAN对图像进行着色 我不能让它工作 我试图对我的数据集使用简单的一次性迭代器,我认为这可能会导致问题,但我不知道为什么 所以我要问的是 谁能告诉我密码有什么问题吗 代码: AttributeError: 'tuple' object has no attribute 'ndims' ----------------------------------------------------------------------

因此,我正在尝试使用新的TensorFlow数据集API来训练GAN对图像进行着色 我不能让它工作

我试图对我的数据集使用简单的一次性迭代器,我认为这可能会导致问题,但我不知道为什么

所以我要问的是

谁能告诉我密码有什么问题吗

代码:

 AttributeError: 'tuple' object has no attribute 'ndims'
     ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-701a9276e633> in <module>()
     94 
     95 
---> 96 train()

<ipython-input-1-701a9276e633> in train()
     41 #     print(foo.shape)
     42     print("==========================+==============")
---> 43     gen_image = gen(foo, True)
     44 #     gen_image = gen(next_gray, True)
     45     print("==========================+==============")

~\Desktop\code\python\image_processing\Untitled Folder\Untitled Folder\testing1_2\my_gen.py in gen(input, is_train)
     30         conv1 = tf.layers.conv2d(input,c1,k_size,strides,'SAME',
     31                                  kernel_initializer=tf.truncated_normal_initializer(stddev=stddev),
---> 32                                  name='conv1')
     33 
     34         bn1 = tf.contrib.layers.batch_norm(conv1,is_training=is_train, updates_collections=None,

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\layers\convolutional.py in conv2d(inputs, filters, kernel_size, strides, padding, data_format, dilation_rate, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint, trainable, name, reuse)
    423       _reuse=reuse,
    424       _scope=name)
--> 425   return layer.apply(inputs)
    426 
    427 

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in apply(self, inputs, *args, **kwargs)
    803       Output tensor(s).
    804     """
--> 805     return self.__call__(inputs, *args, **kwargs)
    806 
    807   def _set_learning_phase_metadata(self, inputs, outputs):

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\layers\base.py in __call__(self, inputs, *args, **kwargs)
    360 
    361       # Actually call layer
--> 362       outputs = super(Layer, self).__call__(inputs, *args, **kwargs)
    363 
    364     if not context.executing_eagerly():

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, inputs, *args, **kwargs)
    718 
    719         # Check input assumptions set before layer building, e.g. input rank.
--> 720         self._assert_input_compatibility(inputs)
    721         if input_list and self._dtype is None:
    722           try:

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _assert_input_compatibility(self, inputs)
   1408           spec.min_ndim is not None or
   1409           spec.max_ndim is not None):
-> 1410         if x.shape.ndims is None:
   1411           raise ValueError('Input ' + str(input_index) + ' of layer ' +
   1412                            self.name + ' is incompatible with the layer: '

AttributeError: 'tuple' object has no attribute 'ndims'
创建数据集

def get_next():

    #where gray_ls is just a list of image paths 
    gray_ds   = tf.data.Dataset.from_tensor_slices(gray_ls).shuffle(50).map(in_parser).batch(30).repeat()
    print(f"output types = {gray_ds.output_types}")   # --> output types = <dtype: 'float32'>
    print(f"output shapes = {gray_ds.output_shapes}") # --> output shapes = (?, ?, ?, ?)

    gray_iter  = gray_ds.make_one_shot_iterator()
    next_gray  = gray_iter.get_next()

    # next_color is the same as next gray just different images
    return next_color, next_gray

# mapping function 
def in_parser(img_path):

    img_file = tf.read_file(img_path)
    img = tf.image.decode_image(img_file,channels=3)
    img = tf.image.random_flip_left_right(img)
    img = tf.image.random_brightness(img, max_delta = 0.1)
    img = tf.image.random_contrast(img, lower = 0.9, upper = 1.1)
    img = tf.cast(img, tf.float32)
    img = img/255.0
    print(img)
    return img
#some global vars 
stddev  = 0.02
decay   = 0.9
epsilon = 1e-4
k_size  = [5,5]
strides = [2,2]
def gen(input, is_train):

#chanel number
c1 , c2 ,c3 ,c4 = 64, 128, 256, 512

with tf.variable_scope("gen",reuse=tf.AUTO_REUSE):

    #this is where it crashes
    conv1 = tf.layers.conv2d(input,c1,k_size,strides,'SAME',
                             kernel_initializer=tf.truncated_normal_initializer(stddev=stddev),
                             name='conv1')

    bn1 = tf.contrib.layers.batch_norm(conv1,is_training=is_train, updates_collections=None,
                                       decay=decay,epsilon=epsilon,scope='bn1')
    ac1 = lrelu(bn1,'ac1')
#there is more code after this
现在出现了一个错误:

 AttributeError: 'tuple' object has no attribute 'ndims'
     ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-701a9276e633> in <module>()
     94 
     95 
---> 96 train()

<ipython-input-1-701a9276e633> in train()
     41 #     print(foo.shape)
     42     print("==========================+==============")
---> 43     gen_image = gen(foo, True)
     44 #     gen_image = gen(next_gray, True)
     45     print("==========================+==============")

~\Desktop\code\python\image_processing\Untitled Folder\Untitled Folder\testing1_2\my_gen.py in gen(input, is_train)
     30         conv1 = tf.layers.conv2d(input,c1,k_size,strides,'SAME',
     31                                  kernel_initializer=tf.truncated_normal_initializer(stddev=stddev),
---> 32                                  name='conv1')
     33 
     34         bn1 = tf.contrib.layers.batch_norm(conv1,is_training=is_train, updates_collections=None,

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\layers\convolutional.py in conv2d(inputs, filters, kernel_size, strides, padding, data_format, dilation_rate, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint, trainable, name, reuse)
    423       _reuse=reuse,
    424       _scope=name)
--> 425   return layer.apply(inputs)
    426 
    427 

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in apply(self, inputs, *args, **kwargs)
    803       Output tensor(s).
    804     """
--> 805     return self.__call__(inputs, *args, **kwargs)
    806 
    807   def _set_learning_phase_metadata(self, inputs, outputs):

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\layers\base.py in __call__(self, inputs, *args, **kwargs)
    360 
    361       # Actually call layer
--> 362       outputs = super(Layer, self).__call__(inputs, *args, **kwargs)
    363 
    364     if not context.executing_eagerly():

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, inputs, *args, **kwargs)
    718 
    719         # Check input assumptions set before layer building, e.g. input rank.
--> 720         self._assert_input_compatibility(inputs)
    721         if input_list and self._dtype is None:
    722           try:

~\Anaconda2\envs\image_rec\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _assert_input_compatibility(self, inputs)
   1408           spec.min_ndim is not None or
   1409           spec.max_ndim is not None):
-> 1410         if x.shape.ndims is None:
   1411           raise ValueError('Input ' + str(input_index) + ' of layer ' +
   1412                            self.name + ' is incompatible with the layer: '

AttributeError: 'tuple' object has no attribute 'ndims'
AttributeError:“tuple”对象没有属性“ndims”
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
94
95
--->96列车()
列车上
41#打印(食物形状)
42打印(“============================================================================================================================”)
--->43 gen_image=gen(foo,True)
44#gen#u image=gen(下一个灰色,真)
45打印(“======================================================================================================================”)
~\Desktop\code\python\image\u processing\untitle Folder\untitle Folder\testing1\u 2\my\u gen.py in gen(输入,是\u train)
30 conv1=tf.layers.conv2d(输入,c1,k_大小,步幅,'SAME',
31内核初始化器=tf.截断的正常初始化器(stddev=stddev),
--->32 name='conv1')
33
34 bn1=tf.contrib.layers.batch\u norm(conv1,is\u training=is\u train,updates\u collections=None,
conv2d中的~\Anaconda2\envs\image\u rec\lib\site packages\tensorflow\python\layers\convolutional.py(输入、过滤器、内核大小、步幅、填充、数据格式、膨胀率、激活、使用偏差、内核初始值设定项、偏差初始值设定项、内核正则化器、偏差正则化器、活动正则化器、内核约束、偏差约束、可训练、名称、重用)
423 _重用=重用,
424(范围=名称)
-->425返回层。应用(输入)
426
427
应用中的~\Anaconda2\envs\image\u rec\lib\site packages\tensorflow\python\keras\engine\base\u layer.py(self、input、*args、**kwargs)
803输出张量(s)。
804     """
-->805返回自我。调用(输入,*args,**kwargs)
806
807定义设置学习阶段元数据(自身、输入、输出):
~\Anaconda2\envs\image\u rec\lib\site packages\tensorflow\python\layers\base.py in\uuuu调用(self、input、*args、**kwargs)
360
361#实际呼叫层
-->362输出=超级(层,自身)。\调用(输入,*args,**kwargs)
363
364如果不是上下文。急切地执行_():
调用中的~\Anaconda2\envs\image\u rec\lib\site packages\tensorflow\python\keras\engine\base\u layer.py(self、input、*args、**kwargs)
718
719#检查层构建前设置的输入假设,例如输入等级。
-->720自维护输入兼容性(输入)
721如果输入列表和自我类型为无:
722尝试:
~\Anaconda2\envs\image\u rec\lib\site packages\tensorflow\python\keras\engine\base\u layer.py in\u assert\u input\u兼容性(self,inputs)
1408 spec.min\u ndim不是无或
1409规格最大值(ndim不是无):
->1410如果x.shape.ndims为无:
1411 raise VALUERROR('Input'+str(Input_index)+'of layer'+
1412 self.name+'与层不兼容:'
AttributeError:“tuple”对象没有属性“ndims”

提前感谢

,显然,将输出转换为tf.float32解决了问题

next_color, next_gray = get_next()

sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())  
foo = sess.run(next_gray)
gray_batch = tf.cast(foo, dtype = tf.float32) 

gen_image = gen(gray_batch, True)

请将错误包含在问题正文中,可以将错误复制并粘贴为文本,只需将其格式化为代码块,即可呈现为OK。什么是
gen
?这就是错误发生的地方。