首页 文章

Turi创造了痛苦的过度内存使用而没有进展

提问于
浏览
0

我一直在尝试使用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 PROGRESS:从5%的训练数据创建验证集 . 可能还要等一下 . 您可以设置validation_set = None以禁用验证跟踪 . 警告:与示例数量相比,此问题中的要素尺寸数量非常大 . 除非设置了适当的正则化值,否则此模型可能无法为验证/测试集提供准确的预测 . Logistic回归:数量示例: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个图像) . 我认为我的电脑和记忆不是问题,所以我做错了什么?

提前感谢您的任何答案


UPDATE

我发现了问题所在!虽然,我不知道如何解决它 .

这个部分:

def get_label(path, labels=labels):  
    for label in labels:  
        if label in path:  
            return label

data['label'] = data['path'].apply(get_label)

NOT 是否根据文件路径正确标记了所有图像 . 这是因为这样的事情

data["foodType"] = data["path"].apply(lambda path: "Rice" if "rice" in path else "Soup")

工作,但使用这种方法我只能有2个不同的标签(2个不同的文件夹),但我想要更多 . 有没有办法根据文件夹的名称标记图像超过2个文件夹?

谢谢!

1 回答

  • 0

    也许你使用的是squeezenet_v1.1会比其他型号好得多 . 你可以试着评论data.explore()

    # data.explore()
    

    这只是可视化所有图像中的图像可能会导致内存问题(如果您的数据集有很多图像) .

相关问题