#python #tensorflow #keras #reinforcement-learning
#python #tensorflow #keras #подкрепление-обучение
Вопрос:
Я хочу переписать сеть в DDPG следующим образом, используя Keras, и я думаю, что этот код объединяет состояние и действие в плотный слой с помощью Relu, а затем соединяет его с плотной функцией без активации
def _build_c(self, s, a, scope, trainable):
with tf.variable_scope(scope):
n_l1 = 30
w1_s = tf.get_variable('w1_s', [self.s_dim, n_l1], trainable=trainable)
w1_a = tf.get_variable('w1_a', [self.a_dim, n_l1], trainable=trainable)
b1 = tf.get_variable('b1', [1, n_l1], trainable=trainable)
net = tf.nn.relu(tf.matmul(s, w1_s) tf.matmul(a, w1_a) b1)
return tf.layers.dense(net, 1, trainable=trainable)
Сеть версии Keras, которую я переписываю, выглядит следующим образом, но производительность отличается от исходной версии Tensorflow, интересно, я неправильно понимаю исходный код при работе с обучаемой переменной и не могу просто объединить состояние и действие.
def create_critic_network(self, state_size,action_dim):
print("Now we build the model")
S = Input(shape=[state_size,])
A = Input(shape=[action_dim,],name='action2')
h0 = Concatenate()([S, A])
h1 = Dense(HIDDEN_UNITS, activation='relu')(h0)
V = Dense(action_dim)(h1)
model = Model(input=[S,A],output=V)
adam = Adam(lr=self.LEARNING_RATE)
model.compile(loss='mse', optimizer=adam)
return model, A, S
Комментарии:
1.
tf.matmul(s, w1_s) tf.matmul(a, w1_a)
суммирует два тензора.Concatenate()([S, A])
объединяет их как отдельные переменные.2. Большое спасибо, но как я могу реализовать
tf.matmul(s, w1_s) tf.matmul(a, w1_a)
в Keras? Интересно, есть ли какие-то похожие функции для создания обучаемых переменных, какtf.get_variable
в Keras, или я могу создать сеть Keras другим способом?3. Вы можете использовать Add layer для добавления двух тензоров. Перед этим вам нужно передать каждый ввод (
s
иa
) на отдельныйDense
уровень для реализацииtf.matmul
части. Чтобы быть более точным, вы должны установить один изDense
withuse_bias=False
, чтобы избежать избыточности.4. о, я понял! Большое вам спасибо!