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
的处理?