Keras “获取错误”;属性错误:';模块';对象没有属性';ifelse'&引用;

Keras “获取错误”;属性错误:';模块';对象没有属性';ifelse'&引用;,keras,theano,vgg-net,Keras,Theano,Vgg Net,我正在使用Theano和Keras并使用下面的命令,试图从.h5文件加载VGG Net的权重 VGG网络模型定义: def VGG_16(weights_path=None): model = Sequential() model.add(ZeroPadding2D((1,1),input_shape=(3,224,224))) model.add(Convolution2D(64, 3, 3, activation='relu')) model.add(Zero

我正在使用Theano和Keras并使用下面的命令,试图从.h5文件加载VGG Net的权重

VGG网络模型定义:

def VGG_16(weights_path=None):
    model = Sequential()
    model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
    model.add(Convolution2D(64, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(64, 3, 3, activation='relu'))
    model.add(MaxPooling2D((2,2), strides=(2,2)))

    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(128, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(128, 3, 3, activation='relu'))
    model.add(MaxPooling2D((2,2), strides=(2,2)))

    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(256, 3, 3, activation='relu'))
    model.add(MaxPooling2D((2,2), strides=(2,2)))

    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(MaxPooling2D((2,2), strides=(2,2)))

    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(ZeroPadding2D((1,1)))
    model.add(Convolution2D(512, 3, 3, activation='relu'))
    model.add(MaxPooling2D((2,2), strides=(2,2)))

    model.add(Flatten())
    model.add(Dense(4096, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(4096, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1000, activation='softmax'))

    if weights_path:
        model.load_weights(weights_path)

    return model
尝试使用以下命令加载权重

model = VGG_16('vgg16_weights_th_dim_ordering_th_kernels.h5')
并将下面的一个作为错误:

'AttributeError Traceback (most recent call last)
<ipython-input-3-e815cc7d5738> in <module>()
      1 #model = VGG_16('vgg16_weights_tf_dim_ordering_tf_kernels.h5')
----> 2 model = VGG_16('vgg16_weights_th_dim_ordering_th_kernels.h5')
      3 #sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
      4 #model.compile(optimizer=sgd, loss='categorical_crossentropy')

<ipython-input-2-f9b05d09c080> in VGG_16(weights_path)
     39     model.add(Flatten())
     40     model.add(Dense(4096, activation='relu'))
---> 41     model.add(Dropout(0.5))
     42     model.add(Dense(4096, activation='relu'))
     43     model.add(Dropout(0.5))

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\models.pyc in add(self, layer)
    330                  output_shapes=[self.outputs[0]._keras_shape])
    331         else:
--> 332             output_tensor = layer(self.outputs[0])
    333             if isinstance(output_tensor, list):
    334                 raise TypeError('All layers in a Sequential model '

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\engine\topology.pyc in __call__(self, x, mask)
    570         if inbound_layers:
    571             # This will call layer.build() if necessary.
--> 572             self.add_inbound_node(inbound_layers, node_indices, tensor_indices)
    573             # Outputs were already computed when calling self.add_inbound_node.
    574             outputs = self.inbound_nodes[-1].output_tensors

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\engine\topology.pyc in add_inbound_node(self, inbound_layers, node_indices, tensor_indices)
    633         # creating the node automatically updates self.inbound_nodes
    634         # as well as outbound_nodes on inbound layers.
--> 635         Node.create_node(self, inbound_layers, node_indices, tensor_indices)
    636 
    637     def get_output_shape_for(self, input_shape):

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\engine\topology.pyc in create_node(cls, outbound_layer, inbound_layers, node_indices, tensor_indices)
    164 
    165         if len(input_tensors) == 1:
--> 166             output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0]))
    167             output_masks = to_list(outbound_layer.compute_mask(input_tensors[0], input_masks[0]))
    168             # TODO: try to auto-infer shape

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\layers\core.pyc in call(self, x, mask)
    108             def dropped_inputs():
    109                 return K.dropout(x, self.p, noise_shape, seed=self.seed)
--> 110             x = K.in_train_phase(dropped_inputs, lambda: x)
    111         return x
    112 

c:\users\sekhar\onedrive\insofe\classes\week17\for_keras\keras-master\keras\backend\theano_backend.pyc in in_train_phase(x, alt)
   1166     if callable(alt):
   1167         alt = alt()
-> 1168     x = theano.ifelse.ifelse(_LEARNING_PHASE, x, alt)
   1169     x._uses_learning_phase = True
   1170     return x

AttributeError: 'module' object has no attribute 'ifelse'
'AttributeError回溯(最近一次调用)
在()
1#model=VGG_16('vgg16_weights_tf_dim_ordering_tf_kernels.h5'))
---->2模型=VGG_16('vgg16_权重_尺寸_排序_内核.h5'))
3#sgd=sgd(lr=0.1,衰变=1e-6,动量=0.9,nesterov=True)
4#model.compile(优化器=sgd,loss='classifical_crossentropy')
在VGG_16中(权重_路径)
39模型。添加(展平())
40型号。添加(密集型(4096,激活='relu'))
--->41型号。添加(辍学率(0.5))
42型号。添加(密集型(4096,激活='relu'))
43型号。添加(辍学率(0.5))
c:\users\sekhar\onedrive\insofe\classes\week17\for\u keras\keras master\keras\models.pyc in add(self,layer)
330输出形状=[self.outputs[0]。\u keras\u形状])
331其他:
-->332输出张量=层(自输出[0])
333如果存在(输出张量,列表):
334 raise TypeError('序列模型中的所有层'
c:\users\sekhar\onedrive\insofe\classes\week17\for\u keras\keras master\keras\engine\topology.pyc in\uu\u调用(self,x,mask)
570如果入站_层:
571#这将在必要时调用layer.build()。
-->572.添加入站节点(入站层、节点索引、张量索引)
调用self.add#inbound_节点时已计算了573#输出。
574 outputs=self.inbound_节点[-1]。output_张量
c:\users\sekhar\onedrive\insofe\classes\week17\for\u keras\keras master\keras\engine\topology.pyc在add\u inbound\u节点中(self、inbound\u层、节点索引、张量索引)
633#创建节点会自动更新self.inbound_节点
634#以及入站层上的出站#u节点。
-->635节点。创建节点(自、入站层、节点索引、张量索引)
636
637 def get_output_shape_for(自身、输入_shape):
c:\users\sekhar\onedrive\insofe\classes\week17\用于创建\u节点(cls、出站\u层、入站\u层、节点\u索引、张量\u索引)中的\u keras\keras master\keras\engine\topology.pyc
164
165如果len(输入_张量)==1:
-->166输出\张量=到\列表(出站\层.调用(输入\张量[0],掩码=输入\掩码[0]))
167输出\u掩码=到\u列表(出站\u层.计算\u掩码(输入\u张量[0],输入\u掩码[0]))
168#待办事项:尝试自动推断形状
c:\users\sekhar\onedrive\insofe\classes\week17\for\u keras\keras master\keras\layers\core.pyc调用(self,x,mask)
108 def丢弃的_输入()
109返回K.dropout(x,self.p,noise_形状,seed=self.seed)
-->110 x=K.在列车相位(下降输入,λ:x)
111返回x
112
c:\users\sekhar\onedrive\insofe\classes\week17\for\u keras\keras master\keras\backend\theano\u backend.pyc处于列车运行阶段(x,alt)
1166如果可调用(alt):
1167 alt=alt()
->1168 x=theano.ifelse.ifelse(_LEARNING_PHASE,x,alt)
1169 x.\u使用\u学习\u阶段=真
1170返回x
AttributeError:“模块”对象没有属性“ifelse”
这个问题的可能解决方案是什么

我的一位朋友说,除了重新安装Anaconda和Theano之外,别无选择。请转告。

简单地尝试一下:

 import theano
 print theano.ifelse  
如果出现错误,您的theano安装很可能是错误的,您应该重新安装

示例输出

<module 'theano.ifelse' from '/usr/local/lib/python2.7/dist-packages/theano/ifelse.pyc'>

简单地尝试一下:

 import theano
 print theano.ifelse  
如果出现错误,您的theano安装很可能是错误的,您应该重新安装

示例输出

<module 'theano.ifelse' from '/usr/local/lib/python2.7/dist-packages/theano/ifelse.pyc'>


您的theano版本对于该版本的Keras来说可能太新了。您应该尝试将theano降级到0.9.x,并至少将Keras升级到2.0。然后它应该工作得很好。

您的theano版本对于该版本的Keras来说可能太新了。您应该尝试将theano降级到0.9.x,并将Keras升级到2.0至少是这样。那么它应该工作得很好。

转到ano_后端文件

第行:

x = theano.ifelse.ifelse(training, x, alt)
覆盖:

x = ifelse.ifelse(training, x, alt)
并且仍然在Ano_后端文件中:

加:


对不起,用英语说。

转到ano\u后端文件

第行:

x = theano.ifelse.ifelse(training, x, alt)
覆盖:

x = ifelse.ifelse(training, x, alt)
并且仍然在Ano_后端文件中:

加:


对不起,英国人。

升级keras应该可以让它工作

我也有类似的问题。使用
pip安装keras升级keras

现在下面的版本组合可以工作了

1.0.1

2.1.3

升级KERA应能使其正常工作

我也有类似的问题。使用
pip安装keras升级keras

现在下面的版本组合可以工作了

1.0.1

2.1.3

您使用的是哪种Keras和Theano版本?Keras版本是1.2.1,Theano版本是0.10.0beta2。您使用的是哪种Keras和Theano版本?Keras版本是1.2.1,Theano版本是0.10.0beta2。这应该是答案。这应该是答案。