Форматирование обучающих данных и меток для небольшого CNN, созданного с использованием Keras Sequential API - PullRequest
0 голосов
/ 18 января 2020

Я работаю над простой сверточной нейроной Net (CNN) для выполнения классификации. Цель этого net - классифицировать скалярные массивы 224 x 256 в одно из трех различных дискретных состояний. Каждое значение в этих массивах представляет собой целочисленное значение пикселя, извлеченное из эмулятора Nintaco .

. У меня есть довольно простая модель, построенная следующим образом:

from sklearn.model_selection import train_test_split
from tensorflow.keras import layers, models
import numpy as np

model = models.Sequential()
model.add(layers.Conv2D(32, 16, strides=8, activation='relu', input_shape=(224, 256, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))
model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])

data_points = [
    [33, 15, ... 25, 16]
    [33, 15, ... 25, 16]
    ...
    [33, 15, ... 25, 16]
    [33, 15, ... 25, 16]
]
labels = [[0.1, 0.2, 0.3] for i in range(len(data_points))]
train_set, test_set, train_labels, test_labels = train_test_split(data_points, labels)

train_labels = np.expand_dims(train_labels, -1)
test_labels = np.expand_dims(test_labels, -1)

model.fit(
        training_set,
        training_labels,
        epochs=10,
        validation_data=(testing_set, testing_labels)
    )

Попытка подгонки это приводит к ошибке с последующей ошибкой: InvalidArgumentError: logits and labels must have the same first dimension, got logits shape [32,3] and labels shape [96] [[{{node loss/dense_1_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]]

Мне совершенно ясно, что я неправильно структурирую данные метки для этой функции, но я не уверен относительно того, как они должны быть правильно отформатированы.

В настоящее время я сосредоточен исключительно на том, чтобы заставить работать функцию подгонки; Я совершенно безразличен к эффективности или построению сети (хотя, если кто-нибудь увидит любой fl aws с моим всеобъемлющим подходом, пожалуйста, не стесняйтесь поднять их).

Как правильно отформатировать мои метки для мои тренировочные данные?

1 Ответ

1 голос
/ 18 января 2020

Возможно, проблема связана с вашей функцией потерь и формой вашего ярлыка. Для sparse_categorical_crossentropy ярлык должен представлять собой 1d вектор.

проверьте training_labels.shape

...