2017-02-28 3 views
2

Ich versuche, die „layer_from_config“ Keras utilty zu verwenden Schichten von zuvor gespeicherten Konfigurationen zu laden, wie beschrieben in: https://keras.io/layers/about-keras-layers/Laden Keras Schichten aus Config

Für den Anfang, ich versuche es auf einem Grund zu verwenden

import keras 
keras.backend.set_image_dim_ordering("th") 

from keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.layers import Activation, Dropout, Flatten, Dense 


# dimensions of our images. 
img_width, img_height = 150, 150 

train_data_dir = '//shared_directory/projects/try_CD/data/train/' 
validation_data_dir = '//shared_directory/projects/try_CD/data/validation' 
nb_train_samples = 2000 
nb_validation_samples = 800 
nb_epoch = 50 # 50 


model = Sequential() 
model.add(Convolution2D(32, 3, 3, input_shape=(3, img_width, img_height))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 

model.add(Convolution2D(32, 3, 3)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 

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

model.add(Flatten()) 
model.add(Dense(64)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='binary_crossentropy', 
       optimizer='rmsprop', 
       metrics=['accuracy']) 



from keras.utils.layer_utils import layer_from_config 


config = model.layers[1].get_config() 
layer = layer_from_config(config) 
Modell

Wie erwartet, config gibt ein dict Typ-Objekt, und das Drucken liest

{'activation': 'relu', 'trainable': True, 'name': 'activation_1'} 

Howev äh, wenn ich den Code oben laufen lasse, bekomme ich folgende Fehlermeldung

Traceback (most recent call last): 
    File "keras_CvD.py", line 91, in <module> 
    layer = layer_from_config(config) 
    File "/usr/local/lib/python2.7/dist-packages/keras/utils/layer_utils.py", line 26, in layer_from_config 
    class_name = config['class_name'] 
KeyError: 'class_name' 

Also, was mache ich falsch?

Antwort

1

Ok, das ist ein seltsamer Fall, vielleicht kommt von einem Update. Hier ist, wie es funktioniert:

wenn Sie print(model.layers[1].get_config()):

{'trainable': True, 'name': 'activation_1', 'activation': 'relu'} 

wenn Sie print(model.get_config()[1]):

{'config': {'trainable': True, 'name': 'activation_1', 'activation': 'relu'}, 'class_name': 'Activation'} 

So ist die model.get_config() ist die eine eine Liste der Wörterbücher enthält, dass layer_from_config() akzeptieren.

Anstatt die Liste der Schichten und dann seine Konfiguration, die in einem "schlechten" Format ist, zu bekommen, müssen Sie die Modellkonfiguration, die eine Liste von Schichten Config mit dem richtigen Format ist.

Ihr Dokument ist nicht auf dem neuesten Stand, so scheint es. Entweder sollten sie es anpassen, oder sie sollten den Code layer.get_config() anpassen.

Wie auch immer, Sie können es jetzt verwenden :)

Verwandte Themen