【发布时间】:2018-09-06 23:03:47
【问题描述】:
我一直在尝试使用 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 个文件夹?
谢谢!
【问题讨论】:
标签: python coreml turi-create