我得到了以下数据样本:
[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='???'),
])
在这种情况下,哪个激活输出功能是理想的?
答案 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'})