我正在研究一个简单的卷积神经网络(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个标量阵列分类为三个不同离散状态之一。每个值...
问题可能与您的损失功能和标签形状有关对于sparse_categorical_crossentropy,标签应为一维向量。