Как повторить входной слой, пока он не превысит определенное количество нейронов? - PullRequest
1 голос
/ 21 сентября 2019

форма моего входного слоя - (Нет,), и я хочу повторять ввод, пока он не превысит определенную величину.(например, пока не превысит (7,))

вот мой код:

import keras

least_accepted = 7 #the least accepted length
Inpt_lyr = keras.Input(shape = (None,))
nxt_lyr = keras.layers.RepeatVector(least_accepted)(Inpt_lyr)
nxt_lyr = keras.layers.Reshape((-1,))
# and so on...

, но я не уверен, что это оптимизированный способ.например, если минимально допустимая длина равна 7, я хочу, чтобы для входов с длиной 1, 2, 3, 4, 5, 6 результаты были такими: 1 -> 7, 2 -> 8, 3 -> 9, 4-> 8, 5 -> 10, 6 -> 12. это их первые кратные, которые больше 7. Любая помощь действительно ценится ...

1 Ответ

1 голос
/ 22 сентября 2019

Функция:

from keras.layers import *
from keras.models import Model
import keras.backend as K
from keras.backend import tf
import numpy as np

minLength = 7

def expandData(x):
    one = K.ones((1,), dtype='int32')
    repetitions = K.cast(tf.ceil(minLength / K.shape(x)[-1:]), 'int32')
    repetitions = K.concatenate([one, repetitions])
    return K.tile(x, repetitions)

Рабочий тест:

inputs = Input((None,))
outputs = Lambda(expandData)(inputs)
model = Model(inputs, outputs)

inputData = [np.arange(i+1).reshape((1,-1)) for i in range(10)]
for inputs in inputData:
    preds = model.predict(inputs)

    print('\ninput sequence - len=', len(inputs[0]), ' - ', inputs)
    print('output sequence - len=', len(preds[0]), ' - ',  preds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...