コード例 #1
0
ファイル: wavenet.py プロジェクト: wweschen/RL-Trader
    def get_inputs(self):

        self.log_x_encode_mean = sequence_mean(tf.log(self.y_encode + 1), self.encode_series_len-self.decode_series_len)
        self.log_x_encode = transform(self.y_encode, self.log_x_encode_mean)
        

        self.log_volume_encode_mean = sequence_mean(tf.log(self.volume_encode + 1), self.encode_series_len-self.decode_series_len)
        self.log_volume_encode = transform(self.volume_encode, self.log_volume_encode_mean)

        self.x = tf.expand_dims(self.log_x_encode, 2)


        self.encode_features = tf.concat([
            tf.expand_dims(self.log_volume_encode, 2),

            tf.expand_dims(tf.cast(self.is_today, tf.float32), 2),

            tf.tile(tf.reshape(self.log_volume_encode_mean, (-1, 1, 1)), (1, tf.shape(self.y_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, tf.shape(self.y_encode)[1], 1)),

        ], axis=2)

        decode_idx = tf.tile(tf.expand_dims(tf.range(self.decode_series_len), 0), (tf.shape(self.y_decode)[0], 1))

        self.decode_features = tf.concat([
            tf.one_hot(decode_idx, self.decode_series_len),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, self.decode_series_len, 1))
        ], axis=2)
コード例 #2
0
ファイル: cnn.py プロジェクト: PZ11/kagglegrocery
    def get_input_sequences(self):
        self.x_encode = tf.placeholder(tf.float32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        self.y_decode = tf.placeholder(tf.float32,
                                       [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])
        self.is_nan_encode = tf.placeholder(tf.float32, [None, None])
        self.is_nan_decode = tf.placeholder(tf.float32,
                                            [None, self.num_decode_steps])

        self.page_id = tf.placeholder(tf.int32, [None])
        self.project = tf.placeholder(tf.int32, [None])
        self.access = tf.placeholder(tf.int32, [None])
        self.agent = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        self.log_x_encode_mean = sequence_mean(tf.log(self.x_encode + 1),
                                               self.encode_len)
        self.log_x_encode = self.transform(self.x_encode)
        self.x = tf.expand_dims(self.log_x_encode, 2)

        self.encode_features = tf.concat([
            tf.expand_dims(self.is_nan_encode, 2),
            tf.expand_dims(tf.cast(tf.equal(self.x_encode, 0.0), tf.float32),
                           2),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
        ],
                                         axis=2)

        decode_idx = tf.tile(
            tf.expand_dims(tf.range(self.num_decode_steps), 0),
            (tf.shape(self.y_decode)[0], 1))
        self.decode_features = tf.concat([
            tf.one_hot(decode_idx, self.num_decode_steps),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1),
                    (1, self.num_decode_steps, 1)),
        ],
                                         axis=2)

        return self.x
コード例 #3
0
    def get_input_sequences(self):
        """
        返回log_x_encode
        :return:
        """
        # batch,encode_steps
        self.x_encode = tf.placeholder(tf.float32, [None, None])
        # batch 每条数据实际长度
        self.encode_len = tf.placeholder(tf.int32, [None])
        # batch,decode_steps
        self.y_decode = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        # batch
        self.decode_len = tf.placeholder(tf.int32, [None])
        # batch ,decode_steps
        self.is_nan_encode = tf.placeholder(tf.float32, [None, None])
        # batch,decode_steps
        self.is_nan_decode = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        # 其他特征
        self.page_id = tf.placeholder(tf.int32, [None])
        self.project = tf.placeholder(tf.int32, [None])
        self.access = tf.placeholder(tf.int32, [None])
        self.agent = tf.placeholder(tf.int32, [None])
        # dropout
        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)
        # 每行求对数- 再求平均值
        self.log_x_encode_mean = sequence_mean(tf.log(self.x_encode + 1), self.encode_len)
        self.log_x_encode = self.transform(self.x_encode)
        # 销量的对数
        self.x = tf.expand_dims(self.log_x_encode, 2)
        #  batch ts feature(1+1+1+9+3+2=17)
        self.encode_features = tf.concat([
            #  nan销量0 1 掩码
            tf.expand_dims(self.is_nan_encode, 2),
            #  0销量 0 1 掩码
            tf.expand_dims(tf.cast(tf.equal(self.x_encode, 0.0), tf.float32), 2),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, tf.shape(self.x_encode)[1], 1)),
        ], axis=2)
        # (batch ,64) 位置信息(0,1,2,...,num_decode_steps)
        decode_idx = tf.tile(tf.expand_dims(tf.range(self.num_decode_steps), 0), (tf.shape(self.y_decode)[0], 1))
        # (batch,64,64),features(64,1+9+3+2) 没有is_nan_encode,x_encode
        self.decode_features = tf.concat([
            # 把每一步独热编码
            tf.one_hot(decode_idx, self.num_decode_steps),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, self.num_decode_steps, 1)),
        ], axis=2)

        return self.x
コード例 #4
0
ファイル: drqn.py プロジェクト: wweschen/RL-Trader
    def get_inputs(self, opens, highs, lows, closes, volumes, positions,
                   order_prices, current_prices, time_since, todays):

        log_x_mean = sequence_mean(tf.log((highs + lows) / 2. + 1),
                                   self.series_length)
        log_x = transform((highs + lows) / 2., log_x_mean)

        log_opens_mean = sequence_mean(tf.log(opens + 1), self.series_length)
        log_opens = transform(opens, log_opens_mean)

        log_highs_mean = sequence_mean(tf.log(highs + 1), self.series_length)
        log_highs = transform(highs, log_highs_mean)

        log_lows_mean = sequence_mean(tf.log(lows + 1), self.series_length)
        log_lows = transform(lows, log_lows_mean)

        log_closes_mean = sequence_mean(tf.log(closes + 1), self.series_length)
        log_closes = transform(closes, log_closes_mean)

        log_volumes_mean = sequence_mean(tf.log(volumes + 1),
                                         self.series_length)
        log_volumes = transform(volumes, log_volumes_mean)

        log_order_pricess = tf.log(order_prices + 1) - log_x_mean

        log_current_prices = tf.log(current_prices + 1) - log_x_mean

        x = tf.expand_dims(log_x, 2)

        features = tf.concat([
            tf.expand_dims(log_opens, 2),
            tf.expand_dims(log_highs, 2),
            tf.expand_dims(log_lows, 2),
            tf.expand_dims(log_closes, 2),
            tf.expand_dims(log_volumes, 2),
            tf.tile(tf.expand_dims(tf.one_hot(positions + 1, 3), 1),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(time_since, 60), 1),
                    (1, tf.shape(opens)[1], 1)),
            tf.expand_dims(tf.cast(todays, tf.float32), 2),
            tf.tile(tf.reshape(log_opens_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_highs_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_lows_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_closes_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_volumes_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_x_mean, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_order_pricess, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
            tf.tile(tf.reshape(log_current_prices, (-1, 1, 1)),
                    (1, tf.shape(opens)[1], 1)),
        ],
                             axis=2)

        return tf.concat([x, features], axis=2)
コード例 #5
0
    def getData(self):
        self.xEncode = tf.placeholder(tf.float32, [None, None])
        self.lengthOfencode = tf.placeholder(tf.int32, [None])
        self.ydecode = tf.placeholder(tf.float32, [None, self.decodeCount])
        self.lengthOfDecode = tf.placeholder(tf.int32, [None])
        self.isNANEncode = tf.placeholder(tf.float32, [None, None])
        self.isNANdecode = tf.placeholder(tf.float32, [None, self.decodeCount])

        self.page_id = tf.placeholder(tf.int32, [None])
        self.project = tf.placeholder(tf.int32, [None])
        self.access = tf.placeholder(tf.int32, [None])
        self.agent = tf.placeholder(tf.int32, [None])

        self.keepProbability = tf.placeholder(tf.float32)
        #to know if we are training on data.
        self.isTraining = tf.placeholder(tf.bool)

        #log_xEncode_mean is log(mean of encode sequence)
        self.log_xEncode_mean = sequence_mean(tf.log(self.xEncode + 1), self.lengthOfencode)

        #computing transformFunction on each encode input value
        self.log_xEncode = self.transformFunction(self.xEncode)


        #expanding dimension by 2
        self.x = tf.expand_dims(self.log_xEncode, 2)

#concat is to concatenate all these vectors around the axis. here axis is 2 which implies that this axis  is  2 dimensional
        #expand_dims adds an additional dimension 1 to the shape -- returns the given input but with an extra dimension.
        self.encodeTensorFeatures = tf.concat([
            tf.expand_dims(self.isNANEncode, 2),
            #tf.cast to cast a tensor to required type.
            tf.expand_dims(tf.cast(tf.equal(self.xEncode, 0.0), tf.float32), 2),
            #-1 is to flatten.
            tf.tile(tf.reshape(self.log_xEncode_mean, (-1, 1, 1)), (1, tf.shape(self.xEncode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, tf.shape(self.xEncode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, tf.shape(self.xEncode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, tf.shape(self.xEncode)[1], 1)),
        ], axis=2)

        decode_idx = tf.tile(tf.expand_dims(tf.range(self.decodeCount), 0), (tf.shape(self.ydecode)[0], 1))
        self.decodeTensorFeatures = tf.concat([
            tf.one_hot(decode_idx, self.decodeCount),
            tf.tile(tf.reshape(self.log_xEncode_mean, (-1, 1, 1)), (1, self.decodeCount, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, self.decodeCount, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, self.decodeCount, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, self.decodeCount, 1)),
        ], axis=2)

        return self.x
コード例 #6
0
    def get_input_sequences(self):
        """
        Placeholder for input sequences
        :return: 
        """
        self.x_encode = tf.placeholder(tf.float32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        self.y_decode = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])
        self.is_nan_encode = tf.placeholder(tf.float32, [None, None])
        self.is_nan_decode = tf.placeholder(tf.float32, [None, self.num_decode_steps])

        self.page_id = tf.placeholder(tf.int32, [None])
        self.project = tf.placeholder(tf.int32, [None])
        self.access = tf.placeholder(tf.int32, [None])
        self.agent = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        self.log_x_encode_mean = sequence_mean(tf.log(self.x_encode + 1), self.encode_len)
        self.log_x_encode = self.transform(self.x_encode)
        self.x = tf.expand_dims(self.log_x_encode, 2)

        # extra features in addition to time series values
        # [batch size, max sequence length, output_units]
        self.encode_features = tf.concat([
            tf.expand_dims(self.is_nan_encode, 2),
            tf.expand_dims(tf.cast(tf.equal(self.x_encode, 0.0), tf.float32), 2),

            # each time step has the same web specific features and statistics
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, tf.shape(self.x_encode)[1], 1)),
        ], axis=2)

        # use the idx of decoded series as one feature, intuitively each prediction for different idx has a unique
        # fixed effect
        decode_idx = tf.tile(tf.expand_dims(tf.range(self.num_decode_steps), 0), (tf.shape(self.y_decode)[0], 1))
        self.decode_features = tf.concat([
            tf.one_hot(decode_idx, self.num_decode_steps),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, self.num_decode_steps, 1)),
        ], axis=2)

        return self.x
コード例 #7
0
    def get_input_sequences(self):
        self.open_encode = tf.placeholder(tf.float32, [None, None])
        self.high_encode = tf.placeholder(tf.float32, [None, None])
        self.low_encode = tf.placeholder(tf.float32, [None, None])
        self.close_encode = tf.placeholder(tf.float32, [None, None])
        self.volume_encode = tf.placeholder(tf.float32, [None, None])
        self.is_today = tf.placeholder(tf.int32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        #self.symbol = tf.placeholder(tf.int32, [None])
        #self.day = tf.placeholder(tf.int32, [None])

        self.y_decode = tf.placeholder(tf.float32,
                                       [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        self.log_x_encode_mean = sequence_mean(
            tf.log((self.high_encode + self.low_encode) / 2. + 1),
            self.encode_len)
        self.log_x_encode = self.transform(
            (self.high_encode + self.low_encode) / 2., self.log_x_encode_mean)
        self.log_x_target_mean = sequence_mean(
            tf.log((self.high_encode[-self.forecast_window:] +
                    self.low_encode[-self.forecast_window:]) / 2. + 1),
            self.decode_len)

        self.log_open_encode_mean = sequence_mean(tf.log(self.open_encode + 1),
                                                  self.encode_len)
        self.log_open_encode = self.transform(self.open_encode,
                                              self.log_open_encode_mean)

        self.log_high_encode_mean = sequence_mean(tf.log(self.high_encode + 1),
                                                  self.encode_len)
        self.log_high_encode = self.transform(self.high_encode,
                                              self.log_high_encode_mean)

        self.log_low_encode_mean = sequence_mean(tf.log(self.low_encode + 1),
                                                 self.encode_len)
        self.log_low_encode = self.transform(self.low_encode,
                                             self.log_low_encode_mean)

        self.log_close_encode_mean = sequence_mean(
            tf.log(self.close_encode + 1), self.encode_len)
        self.log_close_encode = self.transform(self.close_encode,
                                               self.log_close_encode_mean)

        self.log_volume_encode_mean = sequence_mean(
            tf.log(self.volume_encode + 1), self.encode_len)
        self.log_volume_encode = self.transform(self.volume_encode,
                                                self.log_volume_encode_mean)

        self.x = tf.expand_dims(self.log_x_encode, 2)

        self.encode_features = tf.concat([
            tf.expand_dims(self.log_open_encode, 2),
            tf.expand_dims(self.log_high_encode, 2),
            tf.expand_dims(self.log_low_encode, 2),
            tf.expand_dims(self.log_close_encode, 2),
            tf.expand_dims(self.log_volume_encode, 2),
            tf.expand_dims(tf.cast(self.is_today, tf.float32), 2),
            tf.tile(tf.reshape(self.log_open_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_high_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_low_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_close_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_volume_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
        ],
                                         axis=2)

        decode_idx = tf.tile(
            tf.expand_dims(tf.range(self.num_decode_steps), 0),
            (tf.shape(self.y_decode)[0], 1))

        self.decode_features = tf.concat([
            tf.one_hot(decode_idx, self.num_decode_steps),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, self.num_decode_steps, 1))
        ],
                                         axis=2)

        return self.x
コード例 #8
0
ファイル: cnn.py プロジェクト: yingxi320/kaggle_test
    def get_input_sequences(self):
        self.x = tf.placeholder(tf.float32, [None, None])
        self.y = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        self.x_raw = tf.placeholder(tf.float32, [None, None])
        self.x_len = tf.placeholder(tf.int32, [None])
        self.y_len = tf.placeholder(tf.int32, [None])
        self.x_holi = tf.placeholder(tf.int32, [None, None])
        self.y_holi = tf.placeholder(tf.int32, [None, self.num_decode_steps])
        self.x_id = tf.placeholder(tf.int32, [None, None])
        self.y_id = tf.placeholder(tf.int32, [None, self.num_decode_steps])
        self.x_idx = tf.placeholder(tf.int32, [None, None])
        self.y_idx = tf.placeholder(tf.int32, [None, self.num_decode_steps])

        self.x_dow = tf.placeholder(tf.int32, [None, None])
        self.y_dow = tf.placeholder(tf.int32, [None, self.num_decode_steps])
        self.x_month = tf.placeholder(tf.int32, [None, None])
        self.y_month = tf.placeholder(tf.int32, [None, self.num_decode_steps])
        self.x_week = tf.placeholder(tf.int32, [None, None])
        self.y_week = tf.placeholder(tf.int32, [None, self.num_decode_steps])

        self.x_lags = tf.placeholder(tf.float32, [None, None, 10])
        self.y_lags = tf.placeholder(tf.float32,
                                     [None, self.num_decode_steps, 7])

        self.air_area_name = tf.placeholder(tf.int32, [None])
        self.air_genre_name = tf.placeholder(tf.int32, [None])
        self.air_store_id2 = tf.placeholder(tf.int32, [None])

        self.weights = tf.placeholder(tf.float32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        # item_class_embeddings = tf.get_variable(
        #     name='item_class_embeddings',
        #     shape=[self.reader.num_item_class, 20],
        #     dtype=tf.float32
        # )
        #
        # item_class = tf.nn.embedding_lookup(item_class_embeddings, self.item_class)
        #
        # item_nbr_embeddings = tf.get_variable(
        #     name='item_nbr_embeddings',
        #     shape=[self.reader.num_item_nbr, 50],
        #     dtype=tf.float32
        # )
        #
        # item_nbr = tf.nn.embedding_lookup(item_nbr_embeddings, self.item_nbr)

        self.x_mean = tf.expand_dims(sequence_mean(self.x, self.x_len), 1)
        self.x_centered = self.x - self.x_mean
        self.y_centered = self.y - self.x_mean
        self.x_lags_centered = self.x_lags - tf.expand_dims(self.x_mean, 2)
        self.y_lags_centered = self.y_lags - tf.expand_dims(self.x_mean, 2)
        self.x_is_zero = tf.cast(
            tf.equal(self.x_raw, tf.zeros_like(self.x_raw)), tf.float32)
        # self.x_is_negative = tf.cast(tf.less(self.x_raw, tf.zeros_like(self.x_raw)), tf.float32)

        self.encode_features = tf.concat(
            [
                self.x_lags_centered,
                tf.one_hot(self.x_holi, 2),
                tf.one_hot(self.x_idx, 9),
                # tf.expand_dims(self.x_is_zero, 2),
                # tf.expand_dims(self.x_is_negative, 2),
                tf.tile(tf.expand_dims(self.x_mean, 2),
                        (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_area_name,
                                   self.reader.num_area_name), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_genre_name,
                                   self.reader.num_genre_name), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_store_id2,
                                   self.reader.num_store_id), 1),
                    (1, tf.shape(self.x)[1], 1)),
            ],
            axis=2)

        decode_idx = tf.tile(
            tf.expand_dims(tf.range(self.num_decode_steps), 0),
            (tf.shape(self.y)[0], 1))
        decode_features = tf.concat(
            [
                self.y_lags_centered,
                tf.one_hot(decode_idx, self.num_decode_steps),
                tf.one_hot(self.y_holi, 2),
                tf.one_hot(self.y_idx, 9),
                tf.tile(tf.expand_dims(self.x_mean, 2),
                        (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_area_name,
                                   self.reader.num_area_name), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_genre_name,
                                   self.reader.num_genre_name), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.air_store_id2,
                                   self.reader.num_store_id), 1),
                    (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(tf.one_hot(self.cluster, self.reader.num_cluster), 1), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(tf.one_hot(self.family, self.reader.num_family), 1), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(item_class, 1), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(tf.one_hot(self.perishable, self.reader.num_perishable), 1), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(tf.expand_dims(self.is_discrete, 1), 2), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(tf.one_hot(self.store_nbr, self.reader.num_store_nbr), 1), (1, self.num_decode_steps, 1)),
                # tf.tile(tf.expand_dims(item_nbr, 1), (1, self.num_decode_steps, 1)),
            ],
            axis=2)

        lstm_decode_features = bidirectional_lstm_layer(
            decode_features, self.y_len, 100)
        self.decode_features = tf.concat(
            [decode_features, lstm_decode_features], axis=2)

        return tf.expand_dims(self.x_centered, 2)
コード例 #9
0
    def get_input_sequences(self):
        self.x_encode = tf.placeholder(tf.float32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        self.y_decode = tf.placeholder(tf.float32,
                                       [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        self.log_x_encode_mean = sequence_mean(tf.log(self.x_encode + 1),
                                               self.encode_len)
        #         print(" self.log_x_encode_mean " ,self.log_x_encode_mean)
        self.log_x_encode = self.transform(self.x_encode)
        self.x = tf.expand_dims(self.log_x_encode, 2)

        self.encode_features = tf.placeholder(
            tf.float32,
            [None, None, len(self.reader.data_cols) - 2])
        feature_encode_len = tf.tile(tf.expand_dims(self.encode_len, axis=1),
                                     (1, self.encode_features.shape[2]))
        self.log_encode_features_mean = sequence_mean(
            tf.log(self.encode_features + 1), feature_encode_len)
        self.encode_features = self.transform(self.encode_features,
                                              is_features=True)

        ##### Add code to transform features ######
        #         self.encode_features = #### Add code here

        ##### Delete this chunk once self.encode_features are transformed
        #         self.encode_features = tf.concat([
        #             tf.expand_dims(tf.cast(tf.equal(self.x_encode, 0.0), tf.float32), 2),
        #             tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, tf.shape(self.x_encode)[1], 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, tf.shape(self.x_encode)[1], 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, tf.shape(self.x_encode)[1], 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, tf.shape(self.x_encode)[1], 1)),
        #         ], axis=2)

        #         self.encode_features = tf.placeholder(tf.float32, [None, None])
        #         self.encode_features = tf.expand_dims(self.encode_features, 2)

        #         self.encode_features = tf.concat([self.x,self.x,], axis=2)

        ###### Walk through this code to see if needed anymore?
        #         decode_idx = tf.tile(tf.expand_dims(tf.range(self.num_decode_steps), 0), (tf.shape(self.y_decode)[0], 1))
        #         self.decode_features = tf.concat([
        #             tf.one_hot(decode_idx, self.num_decode_steps),
        #             tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)), (1, self.num_decode_steps, 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1), (1, self.num_decode_steps, 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1), (1, self.num_decode_steps, 1)),
        #             tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1), (1, self.num_decode_steps, 1)),
        #         ], axis=2)

        self.decode_features = tf.placeholder(
            tf.float32,
            [None, self.num_decode_steps,
             len(self.reader.data_cols) - 2])
        self.decode_features = self.transform(self.decode_features,
                                              is_features=True)

        #         decode_idx = tf.tile(tf.expand_dims(tf.range(self.num_decode_steps), 0), (tf.shape(self.y_decode)[0], 1))
        #         self.decode_features = tf.concat([
        #             tf.one_hot(decode_idx, self.num_decode_steps),
        #             self.x,
        #         ], axis=2)

        return self.x
コード例 #10
0
    def get_input_sequences(self):
        self.open_encode = tf.placeholder(tf.float32, [None, None])
        self.high_encode = tf.placeholder(tf.float32, [None, None])
        self.low_encode = tf.placeholder(tf.float32, [None, None])
        self.close_encode = tf.placeholder(tf.float32, [None, None])
        self.volume_encode = tf.placeholder(tf.float32, [None, None])
        self.is_today = tf.placeholder(tf.int32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        self.position = tf.placeholder(
            tf.int32, [None])  # -1 short position, 0 neutral, +1 long position
        self.order_price = tf.placeholder(tf.float32, [None])
        self.est_current_price = tf.placeholder(tf.float32, [None])
        self.time_since_open = tf.placeholder(tf.int32, [None])
        #we can not have a position open overnight, so it can not be more than 390 minutes in theory.
        # But in reality, we won't be holding a position too long, so maybe let's say one hour max, 60 max

        #self.symbol = tf.placeholder(tf.int32, [None])
        #self.day = tf.placeholder(tf.int32, [None])

        self.y_decode = tf.placeholder(tf.float32,
                                       [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        self.log_x_encode_mean = sequence_mean(
            tf.log((self.high_encode + self.low_encode) / 2. + 1),
            self.encode_len)
        self.log_x_encode = self.transform(
            (self.high_encode + self.low_encode) / 2., self.log_x_encode_mean)
        self.log_x_target_mean = sequence_mean(
            tf.log((self.high_encode[-self.forecast_window:] +
                    self.low_encode[-self.forecast_window:]) / 2. + 1),
            self.decode_len)

        self.log_open_encode_mean = sequence_mean(tf.log(self.open_encode + 1),
                                                  self.encode_len)
        self.log_open_encode = self.transform(self.open_encode,
                                              self.log_open_encode_mean)

        self.log_high_encode_mean = sequence_mean(tf.log(self.high_encode + 1),
                                                  self.encode_len)
        self.log_high_encode = self.transform(self.high_encode,
                                              self.log_high_encode_mean)

        self.log_low_encode_mean = sequence_mean(tf.log(self.low_encode + 1),
                                                 self.encode_len)
        self.log_low_encode = self.transform(self.low_encode,
                                             self.log_low_encode_mean)

        self.log_close_encode_mean = sequence_mean(
            tf.log(self.close_encode + 1), self.encode_len)
        self.log_close_encode = self.transform(self.close_encode,
                                               self.log_close_encode_mean)

        self.log_volume_encode_mean = sequence_mean(
            tf.log(self.volume_encode + 1), self.encode_len)
        self.log_volume_encode = self.transform(self.volume_encode,
                                                self.log_volume_encode_mean)

        self.position = tf.placeholder(tf.int32, [None])

        self.log_order_price = tf.log(self.order_price +
                                      1) - self.log_x_encode_mean

        self.log_est_current_price = tf.log(self.est_current_price +
                                            1) - self.log_x_encode_mean

        self.x = tf.expand_dims(self.log_x_encode, 2)

        self.encode_features = tf.concat([
            tf.expand_dims(self.log_open_encode, 2),
            tf.expand_dims(self.log_high_encode, 2),
            tf.expand_dims(self.log_low_encode, 2),
            tf.expand_dims(self.log_close_encode, 2),
            tf.expand_dims(self.log_volume_encode, 2),
            tf.tile(tf.expand_dims(tf.one_hot(self.position + 1, 3), 1),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.time_since_open, 60), 1),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.expand_dims(tf.cast(self.is_today, tf.float32), 2),
            tf.tile(tf.reshape(self.log_open_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_high_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_low_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_close_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_volume_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_order_price, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
            tf.tile(tf.reshape(self.log_est_current_price, (-1, 1, 1)),
                    (1, tf.shape(self.open_encode)[1], 1)),
        ],
                                         axis=2)

        return self.x
コード例 #11
0
    def get_input_sequences(self):
        self.x_encode = tf.placeholder(tf.float32, [None, None])
        self.encode_len = tf.placeholder(tf.int32, [None])
        self.y_decode = tf.placeholder(tf.float32,
                                       [None, self.num_decode_steps])
        self.decode_len = tf.placeholder(tf.int32, [None])
        self.is_nan_encode = tf.placeholder(tf.float32, [None, None])
        self.is_nan_decode = tf.placeholder(tf.float32,
                                            [None, self.num_decode_steps])

        self.page_id = tf.placeholder(tf.int32, [None])
        self.project = tf.placeholder(tf.int32, [None])
        self.access = tf.placeholder(tf.int32, [None])
        self.agent = tf.placeholder(tf.int32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        # The mean is the average hits for each web sit in all the given dates
        self.log_x_encode_mean = sequence_mean(tf.log(self.x_encode + 1),
                                               self.encode_len)
        self.log_x_encode = self.transform(self.x_encode)
        self.x = tf.expand_dims(
            self.log_x_encode,
            2)  # minus mean and expand to (batch_size, encode_len, 1)

        # Encoded features, its shape is (batch_size, seq_len, 17)
        self.encode_features = tf.concat([
            tf.expand_dims(self.is_nan_encode, 2),
            tf.expand_dims(tf.cast(tf.equal(self.x_encode, 0.0), tf.float32),
                           2),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1),
                    (1, tf.shape(self.x_encode)[1], 1)),
        ],
                                         axis=2)

        # shape (batch_size, num_decode_steps)
        decode_idx = tf.tile(
            tf.expand_dims(tf.range(self.num_decode_steps), 0),
            (tf.shape(self.y_decode)[0], 1))
        # shape (batch_size, num_decode_steps, 64 + 1 + 9 + 3 + 2 = 79)
        self.decode_features = tf.concat([
            tf.one_hot(decode_idx, self.num_decode_steps),
            tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.project, 9), 1),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.access, 3), 1),
                    (1, self.num_decode_steps, 1)),
            tf.tile(tf.expand_dims(tf.one_hot(self.agent, 2), 1),
                    (1, self.num_decode_steps, 1)),
        ],
                                         axis=2)

        # x is the hits minus mean and transformed by log(1+x) to make it easy to predict
        # shape (batch_size, seq_len, 1)
        return self.x
コード例 #12
0
ファイル: CNN.py プロジェクト: Sandy4321/m5_forcasting
    def get_input_sequences(self):
        # self.x_scales = tf.placeholder(tf.float32, [None, None])
        self.x = tf.placeholder(tf.float32, [None, None])
        self.y = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        self.x_len = tf.placeholder(tf.int32, [None])
        self.y_len = tf.placeholder(tf.int32, [None])
        self.all_id = tf.placeholder(tf.int32, [None])

        self.x_for_mean = tf.placeholder(tf.float32, [None, None])
        self.x_len_for_mean = tf.placeholder(tf.int32, [None])

        self.x_ts = tf.placeholder(tf.float32, [None, None, 10])
        self.x_lags = tf.placeholder(tf.float32, [None, None, 13])
        self.y_lags = tf.placeholder(tf.float32,
                                     [None, self.num_decode_steps, 8])
        self.x_day = tf.placeholder(tf.float32, [None, None])
        self.y_day = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        self.x_snap = tf.placeholder(tf.float32, [None, None])
        self.y_snap = tf.placeholder(tf.float32, [None, self.num_decode_steps])
        self.x_event_name_1 = tf.placeholder(tf.float32, [None, None])
        self.y_event_name_1 = tf.placeholder(tf.float32,
                                             [None, self.num_decode_steps])
        self.x_event_type_1 = tf.placeholder(tf.float32, [None, None])
        self.y_event_type_1 = tf.placeholder(tf.float32,
                                             [None, self.num_decode_steps])
        self.x_sell_price = tf.placeholder(tf.float32, [None, None])
        self.y_sell_price = tf.placeholder(tf.float32,
                                           [None, self.num_decode_steps])
        self.x_sell_price_last_digit = tf.placeholder(tf.int32, [None, None])
        self.y_sell_price_last_digit = tf.placeholder(
            tf.int32, [None, self.num_decode_steps])
        self.x_wday = tf.placeholder(tf.int32, [None, None])
        self.y_wday = tf.placeholder(tf.int32, [None, self.num_decode_steps])

        self.store_id = tf.placeholder(tf.int32, [None])
        self.state_id = tf.placeholder(tf.int32, [None])
        self.dept_id = tf.placeholder(tf.int32, [None])
        self.cat_id = tf.placeholder(tf.int32, [None])
        self.item_id = tf.placeholder(tf.int32, [None])
        self.hierarchy_data = tf.placeholder(tf.float32, [None, 11])

        self.weights = tf.placeholder(tf.float32, [None])

        self.keep_prob = tf.placeholder(tf.float32)
        self.is_training = tf.placeholder(tf.bool)

        item_id_embeddings = tf.get_variable(name='item_id_embeddings',
                                             shape=[self.reader.num_item, 20],
                                             dtype=tf.float32)
        item_id = tf.nn.embedding_lookup(item_id_embeddings, self.item_id)

        self.x_mean = tf.expand_dims(
            sequence_mean(self.x_for_mean, self.x_len_for_mean), 1)
        self.x_centered = self.x - self.x_mean
        self.y_centered = self.y - self.x_mean
        self.x_ts_centered = self.x_ts - tf.expand_dims(self.x_mean, 2)
        self.x_lags_centered = self.x_lags - tf.expand_dims(self.x_mean, 2)
        self.y_lags_centered = self.y_lags - tf.expand_dims(self.x_mean, 2)
        self.x_is_zero = tf.cast(tf.equal(self.x, tf.zeros_like(self.x)),
                                 tf.float32)

        self.encode_features = tf.concat(
            [
                self.x_ts_centered,
                self.x_lags_centered,
                #             tf.expand_dims(self.x_day, 2),
                tf.one_hot(self.x_sell_price_last_digit, 9),
                #             tf.one_hot(self.x_wday, 6),
                tf.expand_dims(self.x_snap, 2),
                tf.expand_dims(self.x_is_zero, 2),
                tf.expand_dims(self.x_event_name_1, 2),
                tf.expand_dims(self.x_event_type_1, 2),
                tf.expand_dims(self.x_sell_price, 2),
                tf.tile(tf.expand_dims(self.x_mean, 2),
                        (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.store_id, self.reader.num_store), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.state_id, self.reader.num_state), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.dept_id, self.reader.num_dept), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.cat_id, self.reader.num_cat), 1),
                    (1, tf.shape(self.x)[1], 1)),
                tf.tile(tf.expand_dims(item_id, 1),
                        (1, tf.shape(self.x)[1], 1)),
            ],
            axis=2)

        decode_idx = tf.tile(
            tf.expand_dims(tf.range(self.num_decode_steps), 0),
            (tf.shape(self.y)[0], 1))
        self.decode_features = tf.concat(
            [
                self.y_lags_centered,
                #             tf.expand_dims(self.y_day, 2),
                tf.one_hot(self.y_sell_price_last_digit, 9),
                #             tf.one_hot(self.y_wday, 6),
                tf.expand_dims(self.y_snap, 2),
                tf.expand_dims(self.y_event_name_1, 2),
                tf.expand_dims(self.y_event_type_1, 2),
                tf.expand_dims(self.y_sell_price, 2),
                tf.one_hot(decode_idx, self.num_decode_steps),
                tf.tile(tf.expand_dims(self.x_mean, 2),
                        (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.store_id, self.reader.num_store), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.state_id, self.reader.num_state), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.dept_id, self.reader.num_dept), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(
                    tf.expand_dims(
                        tf.one_hot(self.cat_id, self.reader.num_cat), 1),
                    (1, self.num_decode_steps, 1)),
                tf.tile(tf.expand_dims(item_id, 1),
                        (1, self.num_decode_steps, 1)),
            ],
            axis=2)

        return tf.expand_dims(self.x_centered, 2)
コード例 #13
0
    def get_inputs(self):

        self.log_x_encode_mean = sequence_mean(
            tf.log((self.high_encode + self.low_encode) / 2. + 1),
            self.series_length)
        self.log_x_encode = transform(
            (self.high_encode + self.low_encode) / 2., self.log_x_encode_mean)

        self.log_open_encode_mean = sequence_mean(tf.log(self.open_encode + 1),
                                                  self.series_length)
        self.log_open_encode = transform(self.open_encode,
                                         self.log_open_encode_mean)

        self.log_high_encode_mean = sequence_mean(tf.log(self.high_encode + 1),
                                                  self.series_length)
        self.log_high_encode = transform(self.high_encode,
                                         self.log_high_encode_mean)

        self.log_low_encode_mean = sequence_mean(tf.log(self.low_encode + 1),
                                                 self.series_length)
        self.log_low_encode = transform(self.low_encode,
                                        self.log_low_encode_mean)

        self.log_close_encode_mean = sequence_mean(
            tf.log(self.close_encode + 1), self.series_length)
        self.log_close_encode = transform(self.close_encode,
                                          self.log_close_encode_mean)

        self.log_volume_encode_mean = sequence_mean(
            tf.log(self.volume_encode + 1), self.series_length)
        self.log_volume_encode = transform(self.volume_encode,
                                           self.log_volume_encode_mean)

        self.position = tf.placeholder(tf.int32, [None])

        self.log_order_price = tf.log(self.order_price +
                                      1) - self.log_x_encode_mean

        self.log_est_current_price = tf.log(self.est_current_price +
                                            1) - self.log_x_encode_mean

        self.x = tf.expand_dims(self.log_x_encode, 2)

        self.features = tf.concat(
            [
                tf.expand_dims(self.log_open_encode, 2),
                tf.expand_dims(self.log_high_encode, 2),
                tf.expand_dims(self.log_low_encode, 2),
                tf.expand_dims(self.log_close_encode, 2),
                tf.expand_dims(self.log_volume_encode, 2),
                tf.tile(tf.expand_dims(tf.one_hot(self.position + 1, 3), 1),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(
                    tf.expand_dims(tf.one_hot(self.time_since_open, 60), 1),
                    (1, tf.shape(self.open_encode)[1], 1)),

                #tf.expand_dims(tf.cast(self.is_today, tf.float32), 2),
                tf.tile(tf.reshape(self.log_open_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_high_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_low_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_close_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_volume_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_x_encode_mean, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_order_price, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
                tf.tile(tf.reshape(self.log_est_current_price, (-1, 1, 1)),
                        (1, tf.shape(self.open_encode)[1], 1)),
            ],
            axis=2)

        self.x = tf.concat([self.x, self.features], axis=2)