Keras с извлечением промежуточного слоя Tensorflow партиями - PullRequest
0 голосов
/ 25 августа 2018

В настоящее время я пытаюсь использовать промежуточный слой из моей уже обученной модели DL в качестве вложения в данный вход.Приведенный ниже код уже работает для получения нужного мне слоя, однако это очень медленно итеративно делать это для большого количества входов.

model = load_model('model.h5')
inp = model.input
outputs = [layer.output for layer in model.layers]
functors = [K.function([inp]+ [K.learning_phase()], [out]) for out in outputs]

def text2tensor(text):
    """Convert string to tensor"""
    tensor = tokenizer.texts_to_sequences([text])
    tensor = pad_sequences(tensor, maxlen=10, padding='pre')
    return tensor

def get_embedding(tensor, at_layer):
    """Get output at particular layer in network """
    functors = [K.function([inp]+ [K.learning_phase()], [out]) for out in outputs][at_layer-1]
    layer_outs = [func([tensor, 1.]) for func in [functors]]
    return layer_outs[0][0]


texts = ['this is my first text',
         'this is my second text',
         'this is my third text',
         .....nth text]

embeddings = np.empty((0,256))
for t in texts:
    tensor = text2tensor(t)
    embedding = get_embedding(tensor,at_layer=4)
    embeddings = np.append(embeddings,[embedding[0]],axis=0)

Как использовать пакетную обработку, чтобы я недолжен сделать это один за другим?С описанной выше реализацией это происходит очень медленно, но работает.

1 Ответ

0 голосов
/ 25 августа 2018

В дополнение к пункту, который я упомянул в своем комментарии, я предлагаю вам создать модель вместо бэкэнд-функции:

input_tensor = Input(shape=(10,))   # assuming maxlen=10
new_model = Model(input_tensor, my_desired_layer.output)

Затем сначала предварительно обработайте текстовые данные, чтобы сформировать входной массив(то есть my_data ниже), а затем используйте метод predict и передайте ему аргумент batch_size для использования пакетной обработки:

out = new_model.predict(my_data)   # the default batch size is 32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...