Как я могу уменьшить значение потери в мультиклассовой классификации Использование CNN в керасе, когда функция потери: categoryorical_crossentropy - PullRequest
0 голосов
/ 07 ноября 2019

У меня проблема с классификацией текста, я хочу классифицировать свои классы texinto 25 с использованием CNN в кератах, но у меня есть проблема, когда я использую categoryorical_crossentropy в качестве функции потерь, я получаю точность 45%
, но когда я использую Binary_crossentropy, я получаюТочность 96% и потеря 18% (я знаю, что не могу использовать Binary_crossentropy), что мне следует сделать, чтобы уменьшить значение потери при использовании categoryorical_crossentropy и повысить точность?

#data_x_encoding
le=preprocessing.LabelEncoder()
x_new = pd.DataFrame(x_new,dtype=str)
x_new.apply(le.fit_transform)
x_new = x_new.apply(le.fit_transform).values[:,:]
#data_x scaling before dividing into train and test
scaler = MinMaxScaler(feature_range=(0,100))
x_new=scaler.fit_transform(x_new)
#data_y encoding
le=preprocessing.LabelEncoder()
data_y = pd.DataFrame(data_y,dtype=str)
data_y.apply(le.fit_transform)
data_y = data_y.apply(le.fit_transform).values[:,:]
one_hot_encoder = OneHotEncoder(categories='auto')
y = np.array(data_y).reshape(-1, 1)
input_labels = one_hot_encoder.fit_transform(data_y).toarray()
#train test split
x_train,x_test,y_train,y_test=train_test_split(x_new,input_labels,random_state=42,test_size=0.25)
x_train = sequence.pad_sequences(x_train, maxlen=100)
x_test = sequence.pad_sequences(x_test, maxlen=100)
model_CNN=Sequential()         model_CNN.add(Embedding(input_dim=101,output_dim=128,input_length=100))
model_CNN.add(Conv1D(128, kernel_size=4, activation='relu',padding='same'))
model_CNN.add(MaxPool1D(pool_size=(3)))
model_CNN.add(Dropout(0.2))
model_CNN.add(Conv1D(128, kernel_size=4, activation='relu' ,padding='same'))
model_CNN.add(MaxPool1D(pool_size=(3)))
model_CNN.add(Dropout(0.2))
model_CNN.add(Conv1D(64, kernel_size=4, activation='relu' ,padding='same'))
model_CNN.add(GlobalMaxPooling1D())
model_CNN.add(Dropout(0.2))
model_CNN.add(Dense(128,activation='relu'))
model_CNN.add(Dropout(0.2))
model_CNN.add(Dense(25,activation='softmax'))
model_CNN.summary()
opt=SGD(lr=0.01)
model_CNN.compile(loss='categorical_crossentropy',optimizer=opt,metrics=['accuracy'])
DNN_CNN= model_CNN.fit(x_train,y_train, batch_size=64, epochs=300)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...