python - 如何解决此错误 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)
我不知道该怎么办我一直在努力解决这个错误
解决方案
由于使用sparse_categorical_crossentropy
损失函数而发生错误,请将其替换为categorical_crossentropy
。
请model.complie
用下面的替换你的块
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
optimizer=tensorflow.keras.optimizers.Adam(),
metrics=['accuracy'])
推荐阅读
- .net-core - 清除 .NET Core 中的 DI 缓存
- npm - 常见的 NPM “sdk” 包?
- typeorm - typeorm 加载实体真的很慢
- php - 将图像保存到 MySQL 数据库?是的?或不?
- google-apps-script - 如何查找和使用直接链接到 Google Drive 中上传的图像
- oauth-2.0 - 具有 2 个资源服务器的 OAuth2 架构,具有各自不同的范围
- python-3.x - 如何修复 typeError: unsupported operand type(s) for -: 'str' and 'str' in this code
- javascript - 在实时数据库中创建元素和存储位置
- bash - :没有这样的文件或目录:/dev/fd/62 使用 >(...) 时出错
- ios - 如何删除 React Native 中数字键盘上方的完成栏?