Я очень новичок в этих данных персонала. Поэтому я не уверен, что мне следует написать в качестве вопроса. Я пытаюсь express решить мою проблему как можно проще. Я показываю часть своих кодов.
print(data)
Вывод:
array([[0, 0, 0, ..., 255, 255, 255],
[255, 255, 255, ..., 0, 0, 0],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=object)
print(result)
Вывод:
['Arrowhead' 'Arrowhead' 'Arrowhead' ... 'Vessel' 'Vessel' 'Vessel']
Метка преобразования на номер:
LE = LabelEncoder()
target = LE.fit_transform(result)
print(target)
Вывод:
[ 0 0 0 ... 38 38 38]
Расщепление:
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42, stratify=target)
Я получил ошибку:
ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.
Исправить ошибка, я должен был удалить stratify
, что на данный момент может быть хорошо:
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)
Чтобы построить CNN, я должен был сделать это:
lb = preprocessing.LabelBinarizer()
y_train_categorical = lb.fit_transform(y_train)
y_test_categorical = lb.fit_transform(y_test)
print(y_train_categorical.shape)
print(y_test_categorical.shape)
Вывод:
(1945, 38)
(487, 34)
Вот проблема. Мне нужно такое же значение для оси Y (y_train_categorical.shape[1] & y_test_categorical.shape[1]
). Потому что я применил:
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100,100,1)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(38, activation='softmax'))
, который отлично работает для model.fit ():
model.fit(X_train, y_train_categorical,
batch_size=32, epochs=5, verbose=1)
, но во время оценки на тесте
loss, accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)
print('Loss: ', loss,'\nAcc: ', accuracy)
Я получаю эту ошибку:
ValueError: Error when checking target: expected dense_2 to have shape (38,) but got array with shape (34,)
Как я могу сделать y_train_categorical.shape[1]
& y_test_categorical.shape[1]
одинаковыми или есть какое-то простое решение для решения моей последней ошибки (во время оценки модели на тест)?