Поскольку мои данные слишком велики, я использую pd.read_csv('',chunksize=)
. Я использую categorical_crossentropy
в качестве функции потерь, однако на последнем блоке у меня есть только одна цель. Итак, я получаю сообщение об ошибке:
Вы передаете целевой массив формы (2110, 1) при использовании в качестве потери categorical_crossentropy
.
Теперь я знаю, что могу используйте binary_crossentropy
. Вот что я и сделал.
X_train, X_test, y_train, y_test = train_test_split(train_data, train_labels, shuffle=True, test_size=0.3)
if y_train.shape[1] == 1:
loss = 'binary_crossentropy'
else:
loss = 'categorical_crossentropy'
Когда я это делаю, я получаю ошибку:
IndexError: index 1 выходит за пределы оси 0 с размером 1
Мои данные имеют горячее кодирование. Как я могу устранить эту ошибку? Спасибо.
ОБНОВЛЕНИЕ
Моя цель для последнего чанка выглядит так:
array([[1.],
[1.],
[1.],
...,
[1.],
[1.],
[1.]], dtype=float32)
Мой X_train:
array([[ 0, 0, 0, ..., 8, 0, 0],
[ 0, 0, 0, ..., 11, 0, 0],
[ 0, 0, 0, ..., 7, 0, 0],
...,
[ 0, 0, 0, ..., 8, 0, 0],
[ 0, 0, 0, ..., 22, 0, 0],
[ 0, 0, 0, ..., 5, 0, 1]])
Мой способ кодирования меток:
labels = np.array(labels)
train_data = docs_encoded.astype(int)
encoder = LabelEncoder()
encoder.fit(labels)
encoded_labels = encoder.transform(labels)
train_labels = np_utils.to_categorical(encoded_labels)