【发布时间】:2020-04-02 18:09:45
【问题描述】:
我尝试使用最新版本的 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 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)
任何帮助将不胜感激。感谢您的宝贵时间!
【问题讨论】:
-
我相信这与
train_data.append([np.array(img), label])这一行以及标签是一个字符串这一事实有关。但它仍然无法帮助我修复它。 -
你能打印出这
train_data = load_training_data(TRAIN_DIR)的几行吗?比如train_data[:3, :]或train_data.shape
标签: python tensorflow neural-network conv-neural-network image-recognition