ich bin gerade dabei für meinen Roboter einen RL Algo zu schreiben, bin aber auf das folgende Problem gestoßen.
Da der duelingDQN die Layer in eine Aktions- und eine Wertfunktion aufteilt, muss ich diese anschließend wieder zusammenführen um die endgültigen Q-values zu berechnen (über die Summe).
Hier taucht dann jedoch der folgende Fehler auf:
Code: Alles auswählen
q_value_2 =merge([state_value, action_advantage], mode='sum')
TypeError: 'module' object is not callable
Code: Alles auswählen
from keras import backend as b
from keras.models import Sequential, load_model
from keras.optimizers import RMSprop
from keras.layers import Dense, Dropout, Activation, Lambda, merge, Input
def buildModel(self):
input = Input(shape=(self.state_size,))
x = Dense(32, input_shape=(self.state_size,), activation='relu', kernel_initializer='he_uniform')(input)
x = Dense(16, activation='relu', kernel_initializer='he_uniform')(x)
state_value = Dense(1, kernel_initializer='he_uniform')(x)
state_value = Lambda(lambda s: b.expand_dims(s[:, 0], -1), output_shape=(self.action_size,))(state_value)
action_advantage = Dense(self.action_size, kernel_initializer='he_uniform')(x)
action_advantage = Lambda(lambda a: a[:, :] - b.mean(a[:, :], keepdims=True),
output_shape=(self.action_size,))(action_advantage)
q_value_2 =merge([state_value, action_advantage], mode='sum')
model = Model(input=input, output=q_value_2)
model.summary()
model.compile(loss='mse', optimizer=RMSprop(self.learning_rate))
return model
BG