파이썬에서 가중치를 유지하면서 두 개의 그물로 신경망 분할

Nov 17 2020

에서 keras나는 훈련 과정에서 얻은 가중치로 주어진 훈련 된 신경망에 대한 구조의 초기 계층이있는 모델을 사용하고 싶습니다.

경우에가는 것은 우리가 데이터 집합을 상상할 수 있습니다 df에 spliting 후 train, dev그리고 test우리는이 예를를 들어, 신경망을 훈련 autoencoder.

데이터를 제공하지 않고이 개념을 설명하는 실제 코드 (필요하다고 생각하지 않음) :

from keras.models import Model
from keras.layers import Activation, Dense, Dropout, Input

# Define input layer
input_data = Input(shape=(train.shape[1],), name='Input')

# Define encoding layer
encoded = Dense(encoding_dim, activation='relu')(input_data)

# Define decoding layer
decoded = Dense(train.shape[1], activation='sigmoid')(encoded)

# Create the autoencoder model
autoencoder = Model(input_data, decoded, name='Simple AutoEncoder')

#Compile the autoencoder model
autoencoder.compile(optimizer='rmsprop',
                    loss='binary_crossentropy')

autoencoder.fit(train, train,
                epochs=50,
                batch_size=256,
                shuffle=True,
                validation_data=(dev_x, dev_x), verbose=0)

compilefit모델은 우리가 피팅 프로세스에서 가져온 그들의 무게에 신경 네트워크를 가지고있다.

encoder part내가 가진 무게를 보존하여 어떻게이 그물 만 사용할 수 있습니까?

답변

1 ibarrond Nov 17 2020 at 22:38

나는이 라인을 따라 무언가가 트릭을해야한다고 믿는다.

#...all the code from above, including training...

# Define the encoder model
encoder = Model(input_data, encoded, name='Encoder')

encoder모델은 완전한 Keras 모델로 취급 될 수 있습니다 (저장 /로드 / 적합 / 평가 / 예측 가능).

PeCaDe Nov 18 2020 at 16:15

훈련 및으로써 Autoencoderencoderneuralnet 부분은 autoencoder의 훈련 된 가중치를 포함하는 인코딩 된 객체로 생성 될 것이다.

# Getting the trained weights of the first layer(dense layer of encoder)
weights_ae = autoencoder.layers[1].get_weights()[0]

# The previous code of the example...

# Creating the encoder model
encoder = Model(input_data, encoded, name='Encoder')

# Getting the weights of the encoder model
weights_e = encoder.layers[1].get_weights()[0]

따라서 마지막으로 모델을 생성하면 encoder오토 인코더의 가중치 ( "훈련 된 경험")가 있음을 확인할 수 있습니다.