2017-09-16 132 views
0

我使用Theano和Keras和使用下面的命令,試圖從.h5文件加載VGG網的權重。得到錯誤,「AttributeError錯誤:‘模塊’對象有‘ifelse’無屬性」

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' 

會是什麼這個問題的可能解決方案?

我的一個朋友的說不是重新安裝蟒蛇和Theano其他沒有其他的選擇。請提供。

+0

您使用哪種Keras和Theano版本? –

+0

Keras版本是1.2.1,Theano版本是0.10.0beta2。 – user8494391

回答

2

你的版本theano的可能是該版本的Keras的太新。你應該嘗試降級theano到0.9.x版本,同時還升級Keras至少2.0。那麼它應該完美地工作。

2

嘗試簡單:

import theano 
print theano.ifelse 

如果它顯示了一個錯誤的theano安裝是最有可能錯了,你應該重新安裝。

示例輸出

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

轉到theano_backend文件。

在行:

x = theano.ifelse.ifelse(training, x, alt) 

覆蓋:

x = ifelse.ifelse(training, x, alt) 

而且還在theano_backend文件:

地址:

from theano import ifelse 

對不起由英國。

2

升級keras應該使它工作。

我有類似的問題。升級keras使用pip install keras

現在下面的版本組合工程。

1.0.1 2.1.3

相關問題