【发布时间】: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