1 回答

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊
對于與 sklearn 一起使用GridSearchCV的多類標(biāo)簽,標(biāo)簽不應(yīng)進(jìn)行單熱編碼。它們應(yīng)該是包含兩個以上離散值的一維或列向量。檢查文檔以獲取表示。
所以我們必須將單熱編碼目標(biāo)轉(zhuǎn)換為一維,而這又需要我們將損失函數(shù)更改為sparse_categorical_crossentropy
示例代碼:
X = np.random.randn(1000, 2048)
y = np.array([i for i in range(100)]*10) # <- 1D array with target labels
def myModel():
model = keras.models.Sequential()
model.add(keras.layers.Dense(100, input_dim=2048, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
model = KerasClassifier(build_fn=myModel)
parameters = { 'epochs': [10, 20, 30],
'batch_size':[1, 2, 3, 4, 5, 6, 7,8] }
grid_search = GridSearchCV(estimator=model,
param_grid=parameters,
scoring='accuracy',
cv=2)
grid_search = grid_search.fit(X, y)
print (grid_search.best_params_)
輸出:
Epoch 1/10
500/500 [==============================] - 2s 3ms/step - loss: 5.6664 - accuracy: 0.0100
Epoch 2/10
500/500 [==============================] - 1s 3ms/step - loss: 0.0066 - accuracy: 1.0000
Epoch 3/10
500/500 [==============================] - 1s 3ms/step - loss: 9.9609e-04 - accuracy: 1.0000
------ output truncated ------
{'batch_size': 3, 'epochs': 20}
添加回答
舉報