我使用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其他沒有其他的選擇。請提供。
您使用哪種Keras和Theano版本? –
Keras版本是1.2.1,Theano版本是0.10.0beta2。 – user8494391