2017-09-16 4 views
0

J'utilise Theano et Keras et utilise la commande ci-dessous, en essayant de charger les poids de VGG Net à partir du fichier .h5.Erreur "AttributeError: l'objet 'module' n'a pas d'attribut 'ifelse'"

VGG Modèle Net Définition:

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 

Essayer de charger les poids en utilisant la commande ci-dessous

model = VGG_16('vgg16_weights_th_dim_ordering_th_kernels.h5') 

et a obtenu le ci-dessous un comme erreur:

'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' 

Quel serait la solution probable à ce problème ??

L'un de mes amis dit qu'à part réinstaller Anaconda et Theano, il n'y a pas d'autre alternative. S'il vous plaît adivce.

+0

Quelles sont les versions KERAS et Theano utilisez-vous? –

+0

La version de Keras est 1.2.1 et la version de Theano est 0.10.0beta2. – user8494391

Répondre

2

Votre version de Théano est probablement trop pour cette nouvelle version de Keras. Vous devriez essayer de rétrograder theano à 0.9.x, et aussi améliorer Keras à 2.0 au moins. Ensuite, cela devrait fonctionner parfaitement.

2

Essayez simplement:

import theano 
print theano.ifelse 

S'il apparaît une erreur de votre installation Théano est très probablement faux et vous devez réinstaller.

Exemple sortie

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

Accédez au fichier theano_backend.

À la ligne:

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

Ecraser:

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

Et encore dans le fichier theano_backend:

Ajouter:

from theano import ifelse 

Désolé par les Anglais.

2

La mise à niveau de keras devrait le faire fonctionner.

J'ai un problème similaire. Mise à niveau des keras à l'aide de pip install keras

Exécution des travaux de combinaison de versions suivantes.

1.0.1 2.1.3