Keras-每三分之一的输出具有不同的损耗

时间:2018-08-21 14:04:59

标签: python neural-network keras

A) 我有2个输入和31个输出的数据集。每三分之二的输入都是二进制,其余的是实数值整数。我想在Keras中为这样的任务设置适当的体系结构,其中每三个输出单元具有不同的丢失和激活功能。

因此,总而言之,我希望两个输出具有线性激活和均方误差损失。我想每三分之一有S型激活和二进制交叉熵损失。

我想避免创建15行

layer2 = Dense(2, activation='linear')(firstLayer)

对于实际值,像

这样的10行

layer1 = Dense(1, activation='sigmoid')(first)

又长又荒谬

model.compile(loss=['binary_crossentropy','mean_squared_error',...,'binary_cross_entropy'], optimizer='adam')

是否可以不更改数据集中列的顺序?

B) 目前,我的代码看起来像这样(用于1个二进制列和45个实数值)

x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, 
random_state=123)
y_train_L, y_train_R = y_train[:,0], y_train[:,1:]
y_train_L = y_train_L.reshape(-1,1)
scalarX, scalarY_L, scalarY_R = MinMaxScaler(), MinMaxScaler(),     MinMaxScaler()
scalarX.fit(x_train)
scalarY_L.fit(y_train_L)
scalarY_R.fit(y_train_R)

x_train = scalarX.transform(x_train)
y_train_L = scalarY_L.transform(y_train_L)
y_train_R = scalarY_R.transform(y_train_R)
# define and fit the final model

inputs = Input(shape=(x_train.shape[1],))
first =Dense(46, activation='relu')(inputs)

#last layer
layer45 = Dense(45, activation='linear')(first)
layer1 = Dense(1, activation='sigmoid')(first)
out = [layer1,layer45]
#end last layer

model = Model(inputs=inputs,outputs=out)
model.compile(loss=['binary_crossentropy','mean_squared_error'],     optimizer='adam')
model.fit(x_train, [y_train_L,y_train_R], epochs=1000, verbose=1)

我的假设是否正确

 layer45 = Dense(45, activation='linear')(first)
 layer1 = Dense(1, activation='sigmoid')(first)
 out = [layer1,layer45]

将首先处理对layer1的输入,其余的对layer45的处理?

0 个答案:

没有答案