人总要有点怪癖 2025-05-07 14:31 采纳率: 0%
浏览 6

meshcnn训练数组序列长度不一致

在使用meshcnn训练时,自建数据集mesh网格模型的面片数量无法保持一致,导致数组序列长度不一致不发进行传播的问题。报错信息如下:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (45562,) + inhomogeneous part.
直接使用截断或填充的方法后,模型训练效果不佳,是否有更优秀的方法呢?

  • 写回答

3条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-05-07 14:46
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 问题核心在于MeshCNN训练时,自建数据集中mesh网格模型的面片数量不同,造成数组序列长度不一致,这违反了深度学习模型输入数据格式的要求,导致无法正常进行传播。报错信息ValueError: setting an array elem提示可能是在数据处理或模型输入环节,对数组元素的设置出现了问题,比如试图设置一个形状不匹配的数组元素。
    2. 解决方案
      - 补齐长度
      • 统计数据集中面片数量的最大值。
      • 对每个mesh网格模型,在面片数量不足最大值时,进行补齐操作。例如,如果使用的是numpy数组,可以使用以下代码:
    import numpy as np
    
    max_length = max([mesh_array.shape[0] for mesh_array in dataset])  # 假设dataset是包含所有mesh网格模型数组的列表
    new_dataset = []
    for mesh_array in dataset:
        if mesh_array.shape[0] < max_length:
            padding_length = max_length - mesh_array.shape[0]
            padding = np.zeros((padding_length, mesh_array.shape[1]))  # 假设mesh_array是二维数组,这里padding维度与原数组一致,只补齐第一维
            new_mesh_array = np.vstack((mesh_array, padding))
            new_dataset.append(new_mesh_array)
        else:
            new_dataset.append(mesh_array)
    
    • 截断长度
      • 统计数据集中面片数量的最小值。
      • 对每个mesh网格模型,在面片数量超过最小值时,进行截断操作。例如:
    min_length = min([mesh_array.shape[0] for mesh_array in dataset])
    new_dataset = []
    for mesh_array in dataset:
        if mesh_array.shape[0] > min_length:
            new_mesh_array = mesh_array[:min_length]
            new_dataset.append(new_mesh_array)
        else:
            new_dataset.append(mesh_array)
    
    1. 方案优缺点
      - 补齐长度
      • 优点:能保留所有原始数据,不会丢失任何信息,对于数据量不大且希望充分利用数据的情况较为合适。
      • 缺点:增加了数据量,可能会延长训练时间,并且补齐的数据可能引入一些噪声或不真实的信息,尤其是对于使用随机值进行补齐的情况。
      • 截断长度
      • 优点:简单直接,不会增加额外的数据,训练速度可能相对较快。
      • 缺点:丢失了部分数据,可能会损失一些有价值的信息,尤其是在数据量有限的情况下。
    2. 总结
      - 当遇到MeshCNN训练中数组序列长度不一致的问题时,可以通过补齐长度或截断长度的方法来解决。补齐长度能保留所有数据但可能增加训练负担,截断长度简单快速但会丢失部分数据。具体选择哪种方法需要根据数据集的特点、数据量大小以及对信息完整性的要求等来综合考虑。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月7日