Python 属性错误:';元组';对象没有属性';层';在尝试使用keras进行迁移学习时
我想用keras模型进行迁移学习, 但在向模型添加新层时遇到了困难。 我尝试了以下代码:Python 属性错误:';元组';对象没有属性';层';在尝试使用keras进行迁移学习时,python,tensorflow,keras,transfer-learning,Python,Tensorflow,Keras,Transfer Learning,我想用keras模型进行迁移学习, 但在向模型添加新层时遇到了困难。 我尝试了以下代码: prev_model = load_model('final_model.h5') # loading the previously saved model. new_model = Sequential() new_model.add(prev_model) new_model.add(Dense(256,activation='relu')) new_model.add(Dropout(0.5)) n
prev_model = load_model('final_model.h5') # loading the previously saved model.
new_model = Sequential()
new_model.add(prev_model)
new_model.add(Dense(256,activation='relu'))
new_model.add(Dropout(0.5))
new_model.add(Dense(1,activation='sigmoid'))
但是得到:
TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.layers.core.Flatten object at 0x00000000B74364A8>
在其他岗位。
但这会导致
AttributeError: 'tuple' object has no attribute 'layer'
我目前正在使用
keras 2.2.5
tensorflow-gpu 1.14.0
它是由版本冲突引起的吗
完全回溯:(AttributeError:“tuple”对象没有属性“layer”)
AttributeError回溯(最近一次调用)
在里面
4#vgg_模型.层[i].可训练=假
5 vgg_输出=转换基本输出[0]
---->6输出=tensorflow.keras.layers.Dropout(Dropout_rate,name=“Dropout_out”)(vgg_输出)
7.
8 model1=models.Model(输入=conv_base.inputs,输出=输出)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\keras\engine\base\u layer.py in\uuuuuuuuu调用(self,input,*args,**kwargs)
661 kwargs.pop(“培训”)
662输入,输出=自。\设置\连接\元数据_(
-->663输入、输出、args、kwargs)
664自我处理活动规则化(输入、输出)
665自设置掩码元数据(输入、输出、上一个掩码)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\keras\engine\base\u layer.py in\u set\u connectivity\u metadata\u(self、输入、输出、args、kwargs)
1706 kwargs.pop('mask',None)#'mask'不应序列化。
1707自我添加入站节点(
->1708输入张量=输入,输出张量=输出,参数=kwargs)
1709返回输入、输出
1710
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\keras\engine\base\u layer.py in\u add\u inbound\u节点(self、输入张量、输出张量、参数)
1793 """
1794 inbound_layers=nest.map_结构(lambda t:t._keras_history.layer,
->1795输入(U张量)
1796 node_index=nest.map_结构(lambda t:t._keras_history.node_index,
1797输入(U张量)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\util\nest.py在map\u结构中(func,*structure,**kwargs)
513
514返回包\u序列\u组件(
-->515结构[0],[func(*x)表示条目中的x],
516 expand_composites=expand_composites)
517
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\util\nest.py in(.0)
513
514返回包\u序列\u组件(
-->515结构[0],[func(*x)表示条目中的x],
516 expand_composites=expand_composites)
517
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\tensorflow\python\keras\engine\base\u layer.py in(t)
1792创建节点的调用处的层的“call”方法。
1793 """
->1794 inbound_layers=nest.map_结构(lambda t:t._keras_history.layer,
1795输入(U张量)
1796 node_index=nest.map_结构(lambda t:t._keras_history.node_index,
AttributeError:“元组”对象没有属性“层”
fulltraceback:(TypeError:添加的层必须是类层的实例。)
TypeError回溯(最近一次调用)
在里面
2#模型。添加(上一个模型)
---->3 model.add(tensorflow.keras.layers.globalMapooling2D(name=“gap”))
4模型。添加(展平(name=“展平”))
5如果辍学率>0:
6模型。添加(层。辍学(辍学率,name=“辍学”))
G:\ProgramData\Anaconda3\envs\tensorf\lib\site packages\keras\engine\sequential.py in add(self,layer)
131 raise TypeError('添加的图层必须为'
132“类层的实例”
-->133'找到:'+str(层))
134自建=错误
135如果不是自身层:
TypeError:添加的层必须是类层的实例。找到:
在从tensorflow.keras.layers添加图层时,您已经使用keras.models.model创建了模型。请注意keras和tensorflow.keras是不同的。请确保您坚持使用其中一种方法。请在此发布完整的trackback。回溯还将指示源代码的行号。您是否可以在发布的代码中标记行以显示错误抛出的位置?对于
层
属性错误,我假设vgg_输出与您想象的不一样。您应该打印它以确保。对于类层
错误,我记得Keras不喜欢嵌套模型(将prev_模型
添加到您的顺序
模型中)。也许您可以对此进行调查。。。
keras 2.2.5
tensorflow-gpu 1.14.0
AttributeError Traceback (most recent call last)
<ipython-input-15-afcad6e65f32> in <module>
4 # vgg_model.layers[i].trainable = False
5 vgg_output = conv_base.outputs[0]
----> 6 output = tensorflow.keras.layers.Dropout(dropout_rate, name="dropout_out")(vgg_output)
7
8 model1 = models.Model(inputs=conv_base.inputs, outputs=output)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in __call__(self, inputs, *args, **kwargs)
661 kwargs.pop('training')
662 inputs, outputs = self._set_connectivity_metadata_(
--> 663 inputs, outputs, args, kwargs)
664 self._handle_activity_regularization(inputs, outputs)
665 self._set_mask_metadata(inputs, outputs, previous_mask)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _set_connectivity_metadata_(self, inputs, outputs, args, kwargs)
1706 kwargs.pop('mask', None) # `mask` should not be serialized.
1707 self._add_inbound_node(
-> 1708 input_tensors=inputs, output_tensors=outputs, arguments=kwargs)
1709 return inputs, outputs
1710
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in _add_inbound_node(self, input_tensors, output_tensors, arguments)
1793 """
1794 inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
-> 1795 input_tensors)
1796 node_indices = nest.map_structure(lambda t: t._keras_history.node_index,
1797 input_tensors)
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\util\nest.py in map_structure(func, *structure, **kwargs)
513
514 return pack_sequence_as(
--> 515 structure[0], [func(*x) for x in entries],
516 expand_composites=expand_composites)
517
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\util\nest.py in <listcomp>(.0)
513
514 return pack_sequence_as(
--> 515 structure[0], [func(*x) for x in entries],
516 expand_composites=expand_composites)
517
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\tensorflow\python\keras\engine\base_layer.py in <lambda>(t)
1792 `call` method of the layer at the call that created the node.
1793 """
-> 1794 inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
1795 input_tensors)
1796 node_indices = nest.map_structure(lambda t: t._keras_history.node_index,
AttributeError: 'tuple' object has no attribute 'layer'
TypeError Traceback (most recent call last)
<ipython-input-42-b5858637ba91> in <module>
2 # model.add(prev_model)
----> 3 model.add(tensorflow.keras.layers.GlobalMaxPooling2D(name="gap"))
4 model.add(Flatten(name="flatten"))
5 if dropout_rate > 0:
6 model.add(layers.Dropout(dropout_rate, name="dropout_out"))
G:\ProgramData\Anaconda3\envs\tensorf\lib\site-packages\keras\engine\sequential.py in add(self, layer)
131 raise TypeError('The added layer must be '
132 'an instance of class Layer. '
--> 133 'Found: ' + str(layer))
134 self.built = False
135 if not self._layers:
TypeError: The added layer must be an instance of class Layer. Found: <tensorflow.python.keras.layers.core.Flatten object at 0x00000000B74364A8>
TypeError: The added layer must be an instance of class Layer