Как я могу использовать слой complete_connected во время цикла? - PullRequest
0 голосов
/ 28 августа 2018

Я делаю модель прогнозирования продаж, используя модель seq2seq, и она имеет 12 временных рядов. Есть две функции, одна для поезда, а другая для теста. и затем я бы хотел использовать полностью связанный слой на каждом временном шаге с одинаковыми параметрами.

это мой код.

def mdn_layer(self, lstm_output):
    fc1 = tf.contrib.layers.fully_connected(lstm_output, self.lstm_dim, activation_fn=tf.nn.relu, reuse=True)
    fc_mus = tf.contrib.layers.fully_connected(fc1, self.num_mixture, reuse=True)
    fc_sigmas = tf.contrib.layers.fully_connected(fc1, self.num_mixture, activation_fn=K.exp, reuse=True)
    fc_alphas = tf.contrib.layers.fully_connected(fc1, self.num_mixture, activation_fn=tf.softmax, reuse=True)
    return tf.concat((fc_mus, fc_sigmas, fc_alphas), axis=1)

def train_decoder(self):
    # time-batch-dimension
    y_emb_tbd = tf.transpose(self.y_emb, [1, 0, 2])
    y_qty = tf.transpose(self.y[:, :, 10:], [1, 0, 2])
    train_pred = tf.TensorArray(dtype=tf.float32, size=self.delay)

    def body(step, state, train_pred):
        mdn_out = self.mdn_layer(state.h)

        train_pred = train_pred.write(step, mdn_out)
        step_qty_layer = self.qty_layer(y_qty[step])

        inp = self.decoder_input_layer(tf.concat((y_emb_tbd[step], step_qty_layer), axis=1))

        next_out, next_state = self.decoder_cell(inp, state)

        return step + 1, next_state, train_pred

    _step, _state, _train_pred = tf.while_loop(
        cond=lambda t, _state, _train_pred: t < self.delay,
        body=body,
        loop_vars=(0, self.init_state, train_pred))

    self.output_train = tf.transpose(_train_pred.stack(), perm=[1, 0])

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

...