Как я могу извлечь выход Flatten Layer для каждой эпохи? - PullRequest
0 голосов
/ 03 апреля 2020
model = Sequential()
model.add(Conv2D(50, (5,5), activation='relu', input_shape =(5,5,1), kernel_initializer='he_normal'))

model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()

# compile the model
model.compile(loss='binary_crossentropy', optimizer= 'adam', metrics=['accuracy'])
model_checkpoint=ModelCheckpoint(r'C:\Users\globo\Desktop\Test_CNN\Results\Kernel5x5\Weights'+'\\'+test+'\model_test{epoch:02d}.h5',save_freq=1,save_weights_only=True)

# fit the model
history = model.fit(X_train, Y_train, epochs=10, batch_size=32, verbose=1, callbacks=[model_checkpoint], shuffle=True, validation_split=0.5)

Я уже извлекаю весовые коэффициенты для каждой эпохи с помощью "ModelCheckpoint", но как я могу извлечь сглаженные выходные данные слоя для каждой эпохи и сохранить их?

1 Ответ

0 голосов
/ 03 апреля 2020

делать это с последовательными моделями вообще невозможно. Вы должны использовать функциональный API

inp = Input((5,5,1))
x = Conv2D(50, (5,5), activation='relu', kernel_initializer='he_normal')(inp)
xflatten = Flatten()(x)
out = Dense(1, activation='sigmoid')(xflatten)

main_model = Model(inp, out) # this works same as your model
flatten_model = Model(inp, xflatten) # and this only outputs the flatten layer and is not necessary to compile it because we won't train it, it just shows the output of a layer

main_model.compile(loss='binary_crossentropy', optimizer= 'adam', metrics=['accuracy'])
history = main_model.fit(X_train, Y_train, epochs=10, batch_size=32, verbose=1, callbacks=[model_checkpoint], shuffle=True, validation_split=0.5)

, чтобы увидеть вывод сглаженных слоев:

flatten_model.predict(X)
...