В попытке применить 3 разных функции активации к 3 столбцам последнего плотного слоя я использую лямбда-слои. Сначала я разделяю, а затем снова собираю вывод. Фактическая активация пока не применяется, потому что я обнаружил, что на этапе подгонки модели выдается следующее сообщение:
def createModel():
in_put = Input(shape=(3300,))
layer1 = Dense(512, activation='relu')(in_put)
layer2 = Dense(1024, activation='relu')(layer1)
layer3 = Dense(32, activation='relu')(layer2)
out_put = Dense(3)(layer3)
#splitting output into 3 columns for further activation
theta = Lambda(lambda x: x[:,0], output_shape=(1,))(out_put)
phi = Lambda(lambda x: x[:,1], output_shape=(1,))(out_put)
r = Lambda(lambda x: x[:,2], output_shape=(1,))(out_put)
#combining the activated layers (activation has not been implemented yet)
out_put_a = Lambda(lambda x: K.stack([x[0], x[1], x[2]]),output_shape=(3,), name="output")([theta, phi, r])
model = Model(inputs=in_put, outputs=out_put_a)
return model
my_network=createModel()
batch_size = 1000
epochs = 1
my_network.compile(optimizer='rmsprop', loss='mean_squared_error')
history = my_network.fit_generator(generator=training_generator, epochs=epochs,
validation_data=testing_generator)
Сбой при следующей ошибке:
InvalidArgumentError: 2 root ошибок найдено. (0) Недопустимый аргумент: несовместимые формы: [3] против [1000] [[{{обучение узла / RMSprop / градиенты / потеря / output_loss / mul_grad / BroadcastGradientArgs}}]] [[loss / mul / _55]] (1 ) Недопустимый аргумент: несовместимые формы: [3] против [1000] [[{{обучение узла / RMSprop / градиенты / потеря / output_loss / mul_grad / BroadcastGradientArgs}}]] 0 успешных операций. 0 производных ошибок игнорируется.>
В то же время приведенный ниже код (без слоев Lambda работает просто отлично):
def createModel():
in_put = Input(shape=(3300,))
layer1 = Dense(512, activation='relu')(in_put)
layer2 = Dense(1024, activation='relu')(layer1)
layer3 = Dense(32, activation='relu')(layer2)
out_put = Dense(3)(layer3)
model = Model(inputs=in_put, outputs=out_put)
return model
my_network=createModel()
batch_size = 1000
epochs = 1
my_network.compile(optimizer='rmsprop', loss='mean_squared_error')
history = my_network.fit_generator(generator=training_generator, epochs=epochs,
validation_data=testing_generator)
Может кто-нибудь указать, что не так с лямбда слой?