Керас с лямбда-слоями для пользовательской активации - PullRequest
1 голос
/ 06 марта 2020

В попытке применить 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)

Может кто-нибудь указать, что не так с лямбда слой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...