Pytorch 代码移植嵌入式开发笔记(更新中)

@[TOC]Pytorch 代码移植嵌入式开发笔记
目前在做开发完成后的AI模型移植到下位机的工作。 由于硬件设施简陋,需要把代码和算法翻译成基础加乘算法并输出每个环节参数。

记录几点实用技巧以及项目过程中的Trails & errors, 便于后续检讨和改进

使用框架:pytorch
使用IDE: Pycharm Pro

涉及DATA tracking, 一些小技巧和以及要注意的坑。

1 问题,及解决方法,经验:

  1. torch.tensor 上的tensor folded: 由于将代码翻译成底层算法验证需要, 需要全部数据。

问题分析: pycharm 目前没有发现直接设置的方法。 问题原因来自pytorch data folding。大规模数据在输出均有folding设定。 需要修改设置。 可转化到numpy array 或 pandas 再修改对应设置。

解决思路:

首先需要保证tensor在cpu中而不是在GPU中,否则会报错。如果在GPU中需要复制到CPU

    tensor = tensor.cpu()
  • 方案一 使用pycharm debug 模式直接追踪(仅适合开发调试代码):
    过程中照样出现大型数据缩略表示问题。目前有pandas/numpy 解决方案。
#pandas 解决方案:
import pandas as pd
pd.set_option('display.max_rows', 500)   
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

#然后将cpu 中的tensor 转化为pandas数据格式 
#numpy 解决方案:
import numpy as np
np.set_printoptions(threshold=np.inf)

#然后将cpu 中的tensor 转化为pandas数据格式 
array0 = tesnor.numpy()

#这样就可以在pycharm DEBUG 模式中直接追踪数据,并查看数据全貌了

缺点: 若需要将pycharm 复制保存, 仍会出现省略。 所以导出数据到文件不能借助IDE。

-方案二 使用numpy导出(有坑):
tensor转array方法参照方案一中的numpy解决方案。
array 输出到txt :

np.savetxt('./data', array0)

由于tensor常为多维张量,np.savetxt仅支持1,2维张量,回报错。所以需要reshape。但reshape后不能保留原数据结构,比较麻烦。

-方案三 用json工具包:
在tensor转化为np.array后,转化为list格式。 然后调用json.dump输出。

       data=data.tolist()
       with open(loc, 'w') as f:
           json.dump(data, f)

BINGO!

你可能感兴趣的:(实战,pytorch)