Обработка подграфа нейронной сети как модели в TensorFlow / Keras - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь обучить автокодер в тензорном потоке, используя Keras Layer API. Этот API довольно приятен и прост в использовании для настройки уровней глубокого обучения.

Просто для быстрого просмотра автоэнкодера (на мой взгляд) есть функция $ f (x) = z $ и ее псевдообратная \ hat {x} = f ^ {- 1} (z) такая, что f (f ^ {- 1} (x)) \ прибл. x. В модели нейронной сети вы должны настроить нейронную сеть со слоем узкого места, который пытается предсказать себя х, используя f ^ {- 1} (f (x)). Когда ошибка обучения минимизируется, у вас есть два компонента: z = f (x) - прогноз до и включая слой узкого места. f ^ {- 1} (z) - слой узкого места до конца.

Поэтому я настраиваю кодировщик:

SZ = 6
model = tf.keras.Sequential()

model.add(layers.InputLayer(SZ))
model.add(layers.Dense(SZ))
model.add(layers.Dense(1))
model.add(layers.Dense(SZ))
model.summary()

model.compile('sgd','mse',metrics = ['accuracy'])
history= model.fit(returns.values,returns.values,epochs=100)

Моя трудность здесь заключается в том, что веса и компоненты (f - входной + плотный (SZ) + плотный (1), f ^ {- 1 } будучи дремучим (1) + дремучим (СЗ)) тренируемся но я не знаю как их распутать. Есть ли способ разорвать два слоя в нейронной сети и рассматривать их как свои отдельные модели?

1 Ответ

0 голосов
/ 31 марта 2020
import tensorflow as tf
SZ=6
encoder_input = tf.keras.layers.Input(shape=(SZ,))
x = tf.keras.layers.Dense(SZ)(encoder_input)
x = tf.keras.layers.Dense(1)(x)
encoder_model = tf.keras.Model(inputs=encoder_input, outputs=x, name='encoder')

decoder_input = tf.keras.layers.Input(shape=(1,))
x2 = tf.keras.layers.Dense(SZ)(decoder_input)
decoder_model = tf.keras.Model(inputs=decoder_input, outputs=x2, name='decoder')

encoder_output = encoder_model(encoder_input)
decoder_output = decoder_model(encoder_output)

encoder_decoder_model = tf.keras.Model(inputs=encoder_input , outputs=decoder_output, name='encoder-decoder')
encoder_decoder_model.summary()

Вот сводка:

Model: "encoder-decoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_8 (InputLayer)         [(None, 6)]               0         
_________________________________________________________________
encoder (Model)              (None, 1)                 49        
_________________________________________________________________
decoder (Model)              (None, 6)                 12        
=================================================================
Total params: 61
Trainable params: 61
Non-trainable params: 0

вы можете обучить модель кодера-декодера, и вы разделите encoder_model и decoder_model, которые будут обучены автоматически. Вы также можете получить их из вашей модели encoder_decoder следующим образом:

retrieved_encoder = encoder_decoder_model.get_layer('encoder')
retrieved_encoder.summary()

он печатает:

Model: "encoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_8 (InputLayer)         [(None, 6)]               0         
_________________________________________________________________
dense_11 (Dense)             (None, 6)                 42        
_________________________________________________________________
dense_12 (Dense)             (None, 1)                 7         
=================================================================
Total params: 49
Trainable params: 49
Non-trainable params: 0

и декодер:

retrieved_decoder = encoder_decoder_model.get_layer('decoder')
retrieved_decoder.summary()

, который печатает:

Model: "decoder"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_9 (InputLayer)         [(None, 1)]               0         
_________________________________________________________________
dense_13 (Dense)             (None, 6)                 12        
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...