在以下情况下使用哪个Keras输出层/损失函数

时间:2020-11-06 23:30:19

标签: python pandas numpy keras

我得到了以下数据样本:

[1,2,1,4,5],[1,2,1,4,5],[0,2,7,0,1] with a label of [1,0,1] 
....
[1,9,1,4,5],[1,5,1,4,5],[0,7,7,0,1] with a label of [0,1,1] 

我无法在标签为1或0的单个序列[1,2,1,4,5]上训练它,因为整行都获得了有意义的上下文信息,所以整个15个输入数字应该一起推断。

这不是您的典型分类,也不是回归问题。另外,数据与图像无关,它来自科学领域。

很明显,我将数据作为平面15输入节点馈入网络

model = Sequential(
    [
      Dense(units=16,input_shape = scaled_train_samples[0].shape,activation='relu'),                
      Dense(units=32,activation='relu'),
      Dense(units=3,activation='???'),
    ])

在这种情况下,哪个激活输出功能是理想的?

1 个答案:

答案 0 :(得分:1)

我建议网络有3个输出。由于数据会影响3个“子标签”,因此网络仅在分类层上分开。如果需要,可以向每个特定分支添加更多层。

我假设每个“子标签”都是二进制分类,所以这就是为什么我选择sigmoid(将值从0返回到1,所以更大的数字意味着网络认为它是1类而不是0类)< / p>

为此,您必须像这样更改为Functional API:

from keras.layers import Input, Dense
from keras.models import Model

visible = Input(shape=(scaled_train_samples[0].shape))
model = Dense(16, input_shape = activation='relu')(visible)
model = Dense(32,activation='relu')(model)
model = Dense(16,activation='relu')(model)
out1 = Dense(units=1,activation='sigmoid',name='OUT1')(model)
out2 = Dense(units=1,activation='sigmoid',name='OUT2')(model)
out3 = Dense(units=1,activation='sigmoid',name='OUT3')(model)

finalModel = Model(inputs=visible outputs=[out1, out2, out3])

optimizer = Adam(learning_rate=.0001)
losses = {
    'OUT1': 'binary_crossentropy',
    'OUT2': 'binary_crossentropy',
    'OUT3': 'binary_crossentropy',
    }
model.compile(optimizer=optimizer, loss=losses, metrics={'OUT1':'accuracy', 'OUT2':'accuracy', 'OUT3':'accuracy'})