Модель Keras работает только при активации Sigmoid - PullRequest
0 голосов
/ 06 октября 2019

Я строю модель Keras для классификации данных в одну из 9 категорий. Проблема в том, что он будет работать только с активацией Sigmoid, которая предназначена для двоичных выходов, другие активации приводят к 0 точности. Что мне нужно изменить, чтобы классифицировать по каждому из ярлыков?

#Reshape data to add new dimension
X_train = X_train.reshape((100, 150, 1)) 
Y_train = X_train.reshape((100, 1, 1)) 
model = Sequential() 
model.add(Conv1d(1, kernel_size=3, activation='relu', input_shape=(None, 1))) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 

model.compile(loss='categorical_hinge', optimizer='adam', metrics=['accuracy']) 
model.fit(x=X_train,y=Y_train, epochs=200, batch_size=20)

1 Ответ

1 голос
/ 06 октября 2019

Плотный слой, состоящий из одной единицы, - это не то, что мы используем в случае мультиклассовой классификации;сначала вы должны убедиться, что ваши Y данные закодированы в горячем режиме - если нет, вы можете сделать это, используя служебные функции Keras:

num_classes=9
Y_train = keras.utils.to_categorical(Y_train, num_classes)

, а затем измените свой последний слой на:

model.add(Dense(num_classes)) 
model.add(Activation('softmax')) 

Кроме того, если у вас нет особых причин использовать категориальную потерю шарнира, я бы предложил начать с loss='categorical_crossentropy' в вашей компиляции модели.

Тем не менее, ваша модель кажется слишком простойи вы можете попробовать добавить еще несколько слоев ...

...