回答:
機能的なインターフェースを使用します。
このようなもの:
from keras.layers import Activation, Input, Dense
from keras.models import Model
from keras.layers.merge import Concatenate
input_ = Input(shape=input_shape)
x = input_
x1 = Dense(4, x)
x2 = Dense(4, x)
x3 = Dense(4, x)
x1 = Activation('softmax')(x1)
x2 = Activation('softmax')(x2)
x3 = Activation('softmax')(x3)
x = Concatenate([x1, x2, x3])
model = Model(inputs=input_, outputs=x)
categorical_accuracy
やpredict_classes
メソッドの使用には、もっと考えが必要かもしれません。。。
独自のソフトマックス関数を実装するだけで可能です。テンソルをパーツに分割し、パーツごとに個別にソフトマックスを計算し、テンソルパーツを連結できます。
def custom_softmax(t):
sh = K.shape(t)
partial_sm = []
for i in range(sh[1] // 4):
partial_sm.append(K.softmax(t[:, i*4:(i+1)*4]))
return K.concatenate(partial_sm)
concatenate
軸引数なしでは、最後の軸(この場合、axis = 1)を連結します。
次に、このアクティブ化関数を非表示レイヤーに含めるか、グラフに追加できます。
Dense(activation=custom_activation)
または
model.add(Activation(custom_activation))
また、新しいコスト関数を定義する必要があります。