【问题标题】:How can I solve this error logits and labels must have the same first dimension如何解决此错误 logits 和标签必须具有相同的第一维
【发布时间】:2020-02-14 17:16:58
【问题描述】:

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

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

你能帮我解释一下为什么会出现这个错误,这是我的代码:

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)

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

【问题讨论】:

  • 运行print(Y.shape) 时的输出是什么。重塑 X 是正确的,但我们不应该重塑 Y。
  • 如果X.pickle, Y.pickle的数据可以共享,我可以尝试提供解决方案。
  • 嗨@Chaimanejjam,您能否提供有关您的训练数据集(即形状)的详细信息?

标签: python tensorflow neural-network conv-neural-network shapes


【解决方案1】:

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

请将您的 model.complie 块替换为以下内容

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2018-08-16
    • 2019-09-15
    • 2019-06-10
    • 2021-07-19
    相关资源
    最近更新 更多