от
Я знаю, что применение TimeDistributed (Dense) применяет один и тот же плотный слой ко всем временным шагам, но я хотел знать, как применять разные плотные слои для каждого временного шага. Количество временных шагов не является переменным. П.С .: Я видел следующую ссылку и не могу найти ответ              

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

1 Ответ

0 голосов
от
Вы можете использовать слой LocallyConnected. Слова уровня LocallyConnected в качестве плотного слоя, подключенного к каждому из
kernel_size
time_steps (в данном случае 1).
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model

sequence_length = 10
n_features = 4

def make_model():
  inp = Input((sequence_length, n_features))
  h1 = LocallyConnected1D(8, 1, 1)(inp)
  out = Flatten()(h1)
  model = Model(inp, out)
  model.compile('adam', 'mse')
  return model

model = make_model()
model.summary()
В итоге количество переменных, используемых слоем LocallyConnected, равно
(output_dims * (input_dims   bias)) * time_steps
или (8 * (4 1)) * 10 = 400. Формулируя это по-другому: локально связанный слой выше ведет себя как 10 различных плотных слоев, каждый из которых связан со своим временным шагом (потому что мы выбираем kernel_size как 1). Каждый из этих блоков из 50 переменных представляет собой матрицу весов формы (input_dims, output_dims) плюс вектор смещения размера (output_dims). Также обратите внимание, что с учетом input_shape (sequence_len, n_features),
Dense(output_dims)
и
Conv1D(output_dims, 1, 1)
эквивалентны. то есть эта модель:
def make_model():
  inp = Input((sequence_length, n_features))
  h1 = Conv1D(8, 1, 1)(inp)
  out = Flatten()(h1)
  model = Model(inp, out)
и эта модель:
def make_model():
  inp = Input((sequence_length, n_features))
  h1 = Dense(8)(inp)
  out = Flatten()(h1)
  model = Model(inp, out)
Подобные.     
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...