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