图里(Turi)造成过多的记忆使用情况,没有进展



我一直在尝试使用Turi Create创建一个简单的核心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张图像(。我的计算机和记忆我认为不是问题,所以我做错了什么?

预先感谢您的任何答案


update

我发现问题是什么!虽然,我不知道该如何解决。

本节:

def get_label(path, labels=labels):  
    for label in labels:  
        if label in path:  
            return label
data['label'] = data['path'].apply(get_label)

do 不是根据其文件路径正确标记所有图像。这是因为这样的东西

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

有效,但是使用此方法,我只能有2个不同的标签(2个不同的文件夹(,但我想要更多。有什么方法可以根据2个以上的文件夹中的文件夹的名称标记图像?

谢谢!

也许您使用的是Squeezenet_v1.1会比其他模型更好。您可以尝试通过

来评论data.explore((
# data.explore()

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

相关内容

最新更新