2017-03-12 5 views
2

tensorflow (GPU 사용) 백엔드가있는 시스템에서 Keras 라이브러리를 테스트하려고하는데 다음과 같은 문제가 발생했습니다. here 제기 된 문제를 보았지만 해결 방법을 찾지 못했습니다. WinPython 3.5.2를 Windows 10 컴퓨터에서 실행 중입니다. 여기에 내가 Keras Github에서에서 사용하고있는 예제 코드입니다 : 여기Keras Flatten 오류 (Tensorflow에 특성 팩이 없음)

'''Train a simple deep CNN on the CIFAR10 small images dataset. 
GPU run command with Theano backend (with TensorFlow, the GPU is automatically used): 
    THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python cifar10_cnn.py 

It gets down to 0.65 test logloss in 25 epochs, and down to 0.55 after 50 epochs. 
(it's still underfitting at that point, though). 
''' 

from __future__ import print_function 
from keras.datasets import cifar10 
from keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation, Flatten 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.utils import np_utils 

batch_size = 32 
nb_classes = 10 
nb_epoch = 200 
data_augmentation = True 

# input image dimensions 
img_rows, img_cols = 32, 32 
# The CIFAR10 images are RGB. 
img_channels = 3 

# The data, shuffled and split between train and test sets: 
(X_train, y_train), (X_test, y_test) = cifar10.load_data() 
print('X_train shape:', X_train.shape) 
print(X_train.shape[0], 'train samples') 
print(X_test.shape[0], 'test samples') 

# Convert class vectors to binary class matrices. 
Y_train = np_utils.to_categorical(y_train, nb_classes) 
Y_test = np_utils.to_categorical(y_test, nb_classes) 

model = Sequential() 

model.add(Convolution2D(32, 3, 3, border_mode='same', 
         input_shape=X_train.shape[1:])) 
model.add(Activation('relu')) 
model.add(Convolution2D(32, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Convolution2D(64, 3, 3, border_mode='same')) 
model.add(Activation('relu')) 
model.add(Convolution2D(64, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 

model.add(Flatten()) 
model.add(Dense(512)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(nb_classes)) 
model.add(Activation('softmax')) 

# Let's train the model using RMSprop 
model.compile(loss='categorical_crossentropy', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 

X_train = X_train.astype('float32') 
X_test = X_test.astype('float32') 
X_train /= 255 
X_test /= 255 

if not data_augmentation: 
    print('Not using data augmentation.') 
    model.fit(X_train, Y_train, 
       batch_size=batch_size, 
       nb_epoch=nb_epoch, 
       validation_data=(X_test, Y_test), 
       shuffle=True) 
else: 
    print('Using real-time data augmentation.') 
    # This will do preprocessing and realtime data augmentation: 
    datagen = ImageDataGenerator(
     featurewise_center=False, # set input mean to 0 over the dataset 
     samplewise_center=False, # set each sample mean to 0 
     featurewise_std_normalization=False, # divide inputs by std of the dataset 
     samplewise_std_normalization=False, # divide each input by its std 
     zca_whitening=False, # apply ZCA whitening 
     rotation_range=0, # randomly rotate images in the range (degrees, 0 to 180) 
     width_shift_range=0.1, # randomly shift images horizontally (fraction of total width) 
     height_shift_range=0.1, # randomly shift images vertically (fraction of total height) 
     horizontal_flip=True, # randomly flip images 
     vertical_flip=False) # randomly flip images 

    # Compute quantities required for featurewise normalization 
    # (std, mean, and principal components if ZCA whitening is applied). 
    datagen.fit(X_train) 

    # Fit the model on the batches generated by datagen.flow(). 
    model.fit_generator(datagen.flow(X_train, Y_train, 
            batch_size=batch_size), 
         samples_per_epoch=X_train.shape[0], 
         nb_epoch=nb_epoch, 
         validation_data=(X_test, Y_test)) 

는 그리고 오류가 나는 얻을 수있다 :

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-4-ed3133a09db9> in <module>() 
    53 model.add(Dropout(0.25)) 
    54 
---> 55 model.add(Flatten()) 
    56 model.add(Dense(512)) 
    57 model.add(Activation('relu')) 

C:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\models.py in add(self, layer) 
    310     raise ValueError('All layers in a Sequential model ' 
    311         'should have a single output tensor. ' 
--> 312         'For multi-output layers, ' 
    313         'use the functional API.') 
    314 

C:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\engine\topology.py in __call__(self, x, mask) 
    512    - We call self.add_inbound_node(). 
    513    - If necessary, we `build` the layer to match 
--> 514     the _keras_shape of the input(s). 
    515    - We update the _keras_shape of every input tensor with 
    516     its new shape (obtained via self.get_output_shape_for). 

C:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\engine\topology.py in add_inbound_node(self, inbound_layers, node_indices, tensor_indices) 
    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:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\engine\topology.py in create_node(cls, outbound_layer, inbound_layers, node_indices, tensor_indices) 
    147    node_indices = [0 for _ in range(len(inbound_layers))] 
    148   else: 
--> 149    assert len(node_indices) == len(inbound_layers) 
    150   if not tensor_indices: 
    151    tensor_indices = [0 for _ in range(len(inbound_layers))] 

C:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\layers\core.py in call(self, x, mask) 
    407  ```python 
    408   model = Sequential() 
--> 409   model.add(Permute((2, 1), input_shape=(10, 64))) 
    410   # now: model.output_shape == (None, 64, 10) 
    411   # note: `None` is the batch dimension 

C:\WinPython3.5\python-3.5.2.amd64\lib\site-packages\keras\backend\tensorflow_backend.py in batch_flatten(x) 
    823       x_shape[:-1] + y_shape[:-2] + y_shape[-1:]) 
    824  if is_sparse(x): 
--> 825   out = tf.sparse_tensor_dense_matmul(x, y) 
    826  else: 
    827   out = tf.matmul(x, y) 

AttributeError: module 'tensorflow' has no attribute 'pack' 
+1

사용중인 케라의 버전은 무엇입니까? –

+0

안녕하세요 @ NassimBen 저는 힌트를 통해 이것을 해결했습니다 - 이제는 Keras 1.2.2이고 제대로 작동합니다. 감사! – Matt

+0

좋아요, 도움이 된 것을 기쁘게 생각합니다 :) –

답변

2

미래의 독자들에게 해결책은 케라를 최신 버전으로 업그레이드하는 것이 었습니다.

0

이 모든 커널을 최신 버전으로 Keras을 업그레이드하고 다시 시작하여 해결되었습니다 .

0

이 Keras에서 작동합니다 1.2.2

이 문제가 있다는 것입니다 위해 당신은

$ python -c "import keras;print(keras.__version__)" 

와 Keras 버전 당신은

$ pip install keras --upgrade 

와 그 이유를 당신의 Keras를 업그레이드 할 수 있습니다를 찾을 수 있습니다 Tensorflow 백엔드는 버전 1.0에서 사용됩니다. 이전 버전에서 Tensorflow는 pack에서 stack (source)의 이름 바꾸기를 비롯하여 몇 가지 주요 API 변경 사항을 적용했습니다.