Python 执行器未能创建内核。未实现:不支持将字符串强制转换为int64
我试图使用最新版本的TensorFlow来训练一个包含306张食物图像的本地数据集。然而,当我试着运行它时,它打印出来了 培训306个样本 纪元1/5 在这一点上,它只是停止做任何事情,所以当我试图在cmd中运行它时,我得到了以下错误Python 执行器未能创建内核。未实现:不支持将字符串强制转换为int64,python,tensorflow,neural-network,conv-neural-network,image-recognition,Python,Tensorflow,Neural Network,Conv Neural Network,Image Recognition,我试图使用最新版本的TensorFlow来训练一个包含306张食物图像的本地数据集。然而,当我试着运行它时,它打印出来了 培训306个样本 纪元1/5 在这一点上,它只是停止做任何事情,所以当我试图在cmd中运行它时,我得到了以下错误 Train on 306 samples Epoch 1/5 2019-12-09 15:11:42.788897: E tensorflow/core/common_runtime/executor.cc:642] Executor failed to crea
Train on 306 samples
Epoch 1/5
2019-12-09 15:11:42.788897: E tensorflow/core/common_runtime/executor.cc:642] Executor failed to create kernel. Unimplemented: Cast string to int64 is not supported
[[{{node loss/activation_2_loss/Cast}}]]
我已经看了100遍代码了,我似乎不明白我哪里弄错了,我也找不到任何其他帖子的解决方案
现在查看代码
我从加载图像、调整图像大小和分配标签开始:
TRAIN_DIR = './food11/training'
class_names=['Bread', 'Dairy product', 'Dessert', 'Egg', 'Fried food', 'Meat']
def load_training_data(DIR):
train_data = []
for img in os.listdir(DIR):
word_label = int(img.split('_')[0])
label = class_names[word_label]
path = os.path.join(DIR, img)
if "DS_Store" not in path:
img = Image.open(path)
img = img.convert('L')
img = img.resize((IMG_SIZE, IMG_SIZE), Image.ANTIALIAS)
train_data.append([np.array(img), label])
shuffle(train_data)
return train_data
train_data = load_training_data(TRAIN_DIR)
trainImages = np.array([i[0] for i in train_data]).reshape(-1, IMG_SIZE,IMG_SIZE, 1)
trainLabels = np.array([i[1] for i in train_data])
然后,我对图像进行了标准化,并创建了一个由6个神经元组成的小模型:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(IMG_SIZE, IMG_SIZE, 1)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(128))
model.add(Activation("relu"))
model.add(Dense(6))
model.add(Activation("softmax"))
model.compile(loss="sparse_categorical_crossentropy",
optimizer="adam",
metrics=["accuracy"])
model.fit(trainImages, trainLabels, batch_size = 50, epochs = 5, verbose = 1)
任何帮助都将不胜感激。谢谢你抽出时间 这个问题的解决方案是关于“标签”的一个小错误 它以字符串的形式返回TrainLabel(类名称而不是索引),因此我通过将上面的行替换为
label = int(img.split('_')[0])
我相信这与这行
train\u data.append([np.array(img),label])
以及label是字符串这一事实有关。但是它仍然不能帮助我修复它。你能打印出几行这个train\u data=load\u training\u data(train\u DIR)
吗。例如,train\u data[:3,:]
或train\u data.shape
label = int(img.split('_')[0])