Convolutionele netwerken: delen verborgen laag gewicht als invoer voor andere model

stemmen
0

We bouwden een kleine cnn behulp keras, tensorflow. We gebruikten functionele API keras voor die kwestie. We zijn geïnteresseerd in het voorbijgaan gewichten laatste convolutionele laag (de een voor de volledig aangesloten lagen) als input voor andere cnn.

voor de eenvoud Ik stel voor de volgende vereenvoudigde code te bespreken op:

    from keras.utils import plot_model
    from keras.models import Model
    from keras.layers import Input
    from keras.layers import Dense
    from keras.layers.convolutional import Conv2D
    from keras.layers.pooling import MaxPooling2D
    visible = Input(shape=(64,64,1))
    conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
    pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
    conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1)
    pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
    hidden1 = Dense(10, activation='relu')(pool2)
    output = Dense(1, activation='sigmoid')(hidden1)
    model = Model(inputs=visible, outputs=output)
    model.compile(optimizer='Adam',
            loss=['sparse_categorical_crossentropy', None],
            metrics=['accuracy'])
    model.fit(train_dataset,
        train_labels,
        epochs=400,
        batch_size=512,
        validation_data=(valid_dataset, valid_labels),
        verbose=1,
        callbacks=[early_stop])
    # summarize layers
    print(model.summary())
    # plot graph
    plot_model(model, to_file='convolutional_neural_network.png')

vraag: hoe kan ik doorgeven pool2 laag als input voor een ander eenvoudig model gebruikt keras, zo zal gelijktijdig trainen met de eerste hoger beschreven?

De vraag is gesteld op 11/08/2018 om 10:07
user
In andere talen...                            


1 antwoorden

stemmen
1

Een mogelijke manier zou zijn om toe te voegen aan uw model, zodat alles is opgenomen in een enkel model dat eindigt op 2 takken. De functionele API keras laat een verbinding tussen lagen begrenzen evenwel gewenste en ook de infrastructuur voor het hebben van meerdere uitgangen en verliesfuncties.

Bijvoorbeeld:

from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
visible = Input(shape=(64,64,1))
conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(16, kernel_size=4, activation='relu')(pool1)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)

#add your second model here 
X = FirstLayer()(pool2) #replace with your actual network layer 
# ... 
output2 = YourSecondOutput()(X) 

hidden1 = Dense(10, activation='relu')(pool2)
output = Dense(1, activation='sigmoid')(hidden1)
model = Model(inputs=visible, outputs=[output, output2]) #list of outputs 
model.compile(optimizer='Adam',
        loss=['sparse_categorical_crossentropy', None],
        metrics=['accuracy'])
model.fit(train_dataset,
    train_labels,
    epochs=400,
    batch_size=512,
    validation_data=(valid_dataset, valid_labels),
    verbose=1,
    callbacks=[early_stop])
# summarize layers
print(model.summary())
# plot graph
plot_model(model, to_file='convolutional_neural_network.png')

Dan moet je gewoon nodig hebt om uw input te werken om dat te passen dat u labels voor elke uitgang te hebben. Meer info vind je in de keras documentatie over vinden multi-input en output-modellen

antwoordde op 11/08/2018 om 11:39
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more