Я сейчас работаю над моделью NN на керасе и борюсь с этой ошибкой. Дело в том, что мои слои кажутся полностью обернутыми, и я не совсем понимаю, что происходит не так.
Модель правильно компилируется, если я использую "prims_output" в качестве вывода, но невозможно скомпилировать, когда я пытаюсь пройтиpol_sig "или" pol_mu "в качестве вывода.
def prim_def(args):
Dim_A, nb_primitives, input_vec = args
prims_output = []
for i in range(Dim_A+1):
prim_vec = keras.layers.Dense(256, activation='relu')(input_vec)
prims_output.append(keras.layers.Dense(nb_primitives, activation='linear')(prim_vec)) # mut_i sigmatU_i sigmatT_i sigmatAh_i sigmatI_i
prims_output = np.array(prims_output)
return prims_output
def prim_to_pol(args):
Dim_A, prims_output, weights_output = args
w_i_sigma_i_j = [tensorflow.divide(weights_output, prims_output[j]) for j in range(Dim_A)]
w_i_sigma_i_jxmu_i = [tensorflow.multiply(w_i_sigma_i_j[j], prims_output[-1]) for j in range(Dim_A)]
un_sigma_j = [tensorflow.reduce_sum(w_i_sigma_i_j[j], 2) for j in range(Dim_A)]
mu_j_sigma_j = [tensorflow.reduce_sum(w_i_sigma_i_jxmu_i[j], 2) for j in range(Dim_A)]
sigma_j = [tensorflow.math.reciprocal(un_sigma_j[j]) for j in range(Dim_A)]
mu_j = [tensorflow.divide(mu_j_sigma_j[j], un_sigma_j[j]) for j in range(Dim_A)]
sigma_j = np.array(sigma_j)
mu_j = np.array(sigma_j)
return sigma_j, mu_j
state_input = keras.layers.Input(shape=(timesteps, Dim_S)) # ~Vt, ~Tt, ~Aht, ~It
state_vec = keras.layers.Dense(512, activation='relu')(state_input)
state_vec = keras.layers.Dense(256, activation='relu')(state_vec)
goal_input = keras.layers.Input(shape=(timesteps, Dim_G)) # Vt+1, Tt+1, Aht+1, It+1
goal_vec = keras.layers.Dense(512, activation='relu')(goal_input)
goal_vec = keras.layers.Dense(256, activation='relu')(goal_vec)
concat_vecs = keras.layers.Concatenate()([state_vec, goal_vec])
concat_vecs = keras.layers.Dense(256, activation='relu')(concat_vecs)
weights_output = keras.layers.Dense(nb_primitives, activation='sigmoid')(concat_vecs) # wt_1 ... wt_nb_primitives
prims_output = keras.layers.Lambda(prim_def)([Dim_A, nb_primitives, state_vec])
pol_sig, pol_mu = keras.layers.Lambda(prim_to_pol)([Dim_A, prims_output, weights_output])
model_MCP = keras.models.Model(inputs=[state_input, goal_input], outputs=[i for i in pol_sig])
Я был бы очень признателен, если бы у кого-нибудь было решение. Заранее спасибо за помощь.