循环时如何使用full_connected层?

时间:2018-08-27 21:16:32

标签: python variables lstm mdns

我正在使用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函数中仅使用全连接层?

0 个答案:

没有答案