我一直在尝试使用 Turi Create 创建一个简单的 Core ML 模型,但程序在迭代后停止。我有一个名为“RenderedImages”的文件夹,其中包含带有标签名称的文件夹以及所有相关图像。
编码:
import turicreate as tc
print("Processing images for training...")
# load the images
labels = list(poses)
def get_label(path, labels=labels):
for label in labels:
if label in path:
return label
data = tc.image_analysis.load_images('RenderedImages', with_path = True)
data['label'] = data['path'].apply(get_label)
print(data.groupby('label',[tc.aggregate.COUNT]))
# save the data
sFramePath = 'Data.sframe'
data.save(sFramePath)
data.explore()
#Train the model
print("Training model..")
# load the data
data = tc.SFrame(sFramePath)
train_data, test_data = data.random_split(0.8)
model = tc.image_classifier.create(
train_data,
target='label',
model='squeezenet_v1.1',
max_iterations=500)
print("ENDED")
model.save('MyModel.model')
model.export_coreml('Data.mlmodel')
predictions = model.predict(test_data)
metrics = model.evaluate(test_data)
print(metrics['accuracy'])
输出是:
物化 SFrame... 完成。训练模型.. [19:49:50] src/nnvm/legacy_json_util.cc:190:加载由以前版本 v0.8.0 保存的符号。正在尝试升级... [19:49:50] src/nnvm/legacy_json_util.cc:198:符号升级成功!调整图像大小...对调整大小的图像执行特征提取...已完成 154/154 进度:从 5% 的训练数据创建验证集。可能还要等一下。您可以设置
validation_set=None
禁用验证跟踪。警告:与示例数量相比,此问题中的特征维度数量非常大。除非设置了适当的正则化值,否则此模型可能无法为验证/测试集提供准确的预测。
逻辑回归:
示例数:143 类数:31 特征列数:1 解包特征数:1000 系数数:30030
启动 L-BFGS
+-----------+---------+------------+-------------- +-----------------+---------------------+ | 迭代 | 通行证 | 步长 | 已用时间 | 训练精度 | 验证准确度 | +-----------+---------+------------+-------------- +-----------------+---------------------+ | 1 | 6 | 0.000111 | 1.190632 | 0.076923 | 0.000000 | | 2 | 8 | 1.000000 | 1.284117 | 0.076923 | 0.000000 | | 3 | 9 | 1.000000 | 1.342702 | 0.111888 | 0.090909 | | 4 | 10 | 1.000000 | 1.400136 | 0.412587 | 0.181818 | | 5 | 11 | 1.000000 | 1.463703 | 0.426573 | 0.181818 | | 6 | 12 | 1.000000 | 1.511046 | 0.601399 | 0。454545 | | 11 | 17 | 1.000000 | 1.800922 | 0.853147 | 0.272727 | | 25 | 33 | 0.500000 | 2.653545 | 0.930070 | 0.454545 | | 50 | 65 | 0.500000 | 4.236037 | 1.000000 | 0.545455 | | 51 | 69 | 0.250000 | 4.388548 | 1.000000 | 0.545455 | | 75 | 103 | 0.500000 | 5.984408 | 1.000000 | 0.545455 | | 100 | 142 | 1.000000 | 7.716398 | 1.000000 | 0.545455 | | 101 | 144 | 1.000000 | 7.792923 | 1.000000 | 0.545455 | | 125 | 171 | 1.000000 | 9.240253 | 1.000000 | 0。545455 | +-----------+---------+------------+-------------- +-----------------+----------+
成功:找到最佳解决方案。
然后在这一点之后,内存完全填满,即使我等待一段时间也没有任何反应。
我有 16GB 的内存,为了确保图像的数量不是问题,我什至在每个标签上运行了 5 张图像(总共大约 50 张图像)。我认为我的电脑和内存不是问题,所以我做错了什么?
提前感谢您的任何答案
更新
我发现了问题所在!虽然,我不知道如何解决它。
本节:
def get_label(path, labels=labels):
for label in labels:
if label in path:
return label
data['label'] = data['path'].apply(get_label)
未根据文件路径正确标记所有图像。这是因为这样的事情
data["foodType"] = data["path"].apply(lambda path: "Rice" if "rice" in path else "Soup")
有效,但使用这种方法我只能有 2 个不同的标签(2 个不同的文件夹),但我想要更多。有没有办法根据它们所在的文件夹的名称来标记图像,其中包含超过 2 个文件夹?
谢谢!