为使用Keras顺序API构建的小型CNN格式化训练数据和标签

问题描述 投票:0回答:1

我正在研究一个简单的卷积神经网络(CNN)以进行分类。该网络的目标是将224 x 256个标量阵列分类为三个不同离散状态之一。这些数组中的每个值表示从the Nintaco emulator中提取的整数像素值。

我有一个非常简单的模型,构造如下:

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}}]]

我很清楚,我为此功能构造了不正确的标签数据,但是对于如何正确格式化它,我不确定。

[目前,我只专注于使fit函数起作用;我对网络的有效性或结构完全不关心(尽管如果有人发现我的总体方法有任何缺陷,请不要犹豫,提出来。)

如何正确格式化我的训练数据标签?

我正在研究一个简单的卷积神经网络(CNN)以进行分类。该网络的目标是将224 x 256个标量阵列分类为三个不同离散状态之一。每个值...

python numpy tensorflow keras conv-neural-network
1个回答
0
投票

问题可能与您的损失功能和标签形状有关对于sparse_categorical_crossentropy,标签应为一维向量。

© www.soinside.com 2019 - 2024. All rights reserved.