首页 > 解决方案 > 如何解决此错误 logits 和标签必须具有相同的第一维

问题描述

这是我第一次使用神经网络。拟合我的代码后,我遇到了这个错误:

logits 和标签必须具有相同的第一维,得到 logits 形状 [4,4096] 和标签形状 [16384] [[node loss/activation_27_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits(定义在 C:\Users\admin\Miniconda3\lib\site- packages\tensorflow_core\python\framework\ops.py:1751) ]] [Op:__inference_distributed_function_8265] 函数调用堆栈:distributed_function

你能帮忙请为什么我得到这个错误,这是我的代码:

batch_size = 5
learning_rate = 0.8
no_classes = 1
no_epochs = 3
validation_split = 0.2
verbosity = 0
import tensorflow as tf
import tensorflow.python.keras 
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Input
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.python.keras.layers import Conv2D, MaxPooling2D
from os import listdir
from os.path import isfile, join
import pickle
from tensorflow.python.keras.utils import to_categorical
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.layers.normalization import BatchNormalization


pickle_in = open("X.pickle","rb")
X= pickle.load(pickle_in)

pickle_in = open("Y.pickle","rb")
Y = pickle.load(pickle_in)

# Y=Y/255

img_rows=img_cols=64

if K.image_data_format()== 'channels_first':
    X = np.array(X).reshape(np.array(X).shape[0], 1, img_rows, img_cols)
    Y= np.array(Y).reshape(np.array(Y).shape[0], 1, img_rows, img_cols)
    print(X.shape)
    print(Y.shape)
    input_shape = (1, img_rows, img_cols)
else:
    X = np.array(X).reshape(np.array(X).shape[0], img_rows, img_cols, 1)
    Y = np.array(Y).reshape(np.array(Y).shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols,1)    

print(X.shape)
print(Y.shape)
print(input_shape)

model = Sequential()
model.add(Conv2D(64, (3, 3),input_shape=input_shape,padding="same"))
model.add(Activation('relu'))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64*64))
model.add(Activation('relu'))

model.summary()

model.compile(loss=tensorflow.keras.losses.sparse_categorical_crossentropy,
              optimizer=tensorflow.keras.optimizers.Adam(),
              metrics=['accuracy'])

model.fit(X,Y,
          batch_size=5,
          epochs=no_epochs,
          verbose=verbosity,
          validation_split=validation_split)
score = model.evaluate(X,Y, batch_size=5)

我不知道该怎么办我一直在努力解决这个错误

标签: pythontensorflowneural-networkconv-neural-networkshapes

解决方案


由于使用sparse_categorical_crossentropy损失函数而发生错误,请将其替换为categorical_crossentropy

model.complie用下面的替换你的块

model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
              optimizer=tensorflow.keras.optimizers.Adam(),
              metrics=['accuracy'])

推荐阅读