def build_critic(self):
"""Build critic network
recieve transformed tensor: raw_data, smooted_data, and downsampled_data
"""
nf = self.n_feature
# layer1
# smoothed input
sm_model = [Sequential() for _ in range(self.n_smooth)]
for m in sm_model:
m.add(Lambda(lambda x: x, input_shape=(self.history_length, self.n_stock, 1)))
m.add(Convolution2D(nb_filter=nf, nb_row=self.k_w, nb_col=1, border_mode='same'))
m.add(BatchNormalization(mode=2, axis=-1))
m.add(PReLU())
# down sampled input
dw_model = [Sequential() for _ in range(self.n_down)]
for m in dw_model:
m.add(Lambda(lambda x: x, input_shape=(self.history_length, self.n_stock, 1)))
m.add(Convolution2D(nb_filter=nf, nb_row=self.k_w, nb_col=1, border_mode='same'))
m.add(BatchNormalization(mode=2, axis=-1))
m.add(PReLU())
# raw input
state = Sequential()
nf = self.n_feature
state.add(Lambda(lambda x: x, input_shape=(self.history_length, self.n_stock, 1)))
state.add(Convolution2D(nb_filter=nf, nb_row=self.k_w, nb_col=1, border_mode='same'))
state.add(BatchNormalization(mode=2, axis=-1))
state.add(PReLU())
merged = Merge([state,] + sm_model + dw_model, mode='concat', concat_axis=-1)
# layer2
nf = nf * 2
model = Sequential()
model.add(merged)
model.add(Convolution2D(nb_filter=nf, nb_row=self.k_w, nb_col=1, border_mode='same'))
model.add(BatchNormalization(mode=2, axis=-1))
model.add(PReLU())
model.add(Flatten())
# layer3
model.add(Dense(self.n_hidden))
model.add(BatchNormalization(mode=1, axis=-1))
model.add(PReLU())
# layer4
model.add(Dense(int(np.sqrt(self.n_hidden))))
model.add(PReLU())
# output
model.add(Dense(2 * self.n_stock))
model.add(Reshape((self.n_stock, 2)))
return model
评论列表
文章目录