【问题标题】:How to transform data in angular to correct tensor format?如何将角度数据转换为正确的张量格式?
【发布时间】:2019-09-10 09:32:37
【问题描述】:

我正在做一个机器学习项目,我正在尝试使用 angular 部署我的算法。 我已经正确上传了预训练模型,并且我设法从 csv 上传数据,但现在我无法正确地将我拥有的数据转换为正确的张量格式。 我的模型是一个 LSTM 神经网络,它期望时间窗长度为 60 个加速度计数据(x 轴、y 轴和 z 轴)来预测人类活动,因此格式为 [any, 60,3] 在下面,您可以找到我目前拥有的代码的重要部分

在这里加载模型

async loadModel() {
   this.model = await tf.loadLayersModel('assets/tfjs_model/model.json');
 };

现在我有一个带有 tf.ones() 函数的占位符来简单地测试我的预测是否有效(它确实有效!!)

 async predictProcess() {
   const output = this.model.predict([tf.ones([10, 60, 3])]) as any;    
   this.predictions = Array.from(output.dataSync());
   console.log(this.predictions);

};

这是我加载数据的代码部分

getDataRecordsArrayFromCSVFile(csvRecordsArray: any, headerLength: any) {
let dataArr = [];

for (let i = 0; i < csvRecordsArray.length; i++) {
  let data = (<string>csvRecordsArray[i]).split(',');

  // FOR EACH ROW IN CSV FILE IF THE NUMBER OF COLUMNS
  // ARE SAME AS NUMBER OF HEADER COLUMNS THEN PARSE THE DATA
  if (data.length == headerLength) {

    let csvRecord: CSVRecord = new CSVRecord();

  //  csvRecord.timestep = Number(data[0].trim());
    csvRecord.xAxis = Number(data[1].trim());
    csvRecord.yAxis = Number(data[2].trim());
    csvRecord.zAxis = Number(data[3].trim());

    dataArr.push(csvRecord);
  }
}
return dataArr;
}

这是 CSVRecord 类

export class CSVRecord {
  public timestep: any;
  public xAxis: any;
  public yAxis: any;
  public zAxis: any;
}

【问题讨论】:

  • 我知道答案和人们回答我的问题所花费的时间,我正在努力自己解决问题。但是在这样做的同时,新的问题/问题出现了。我只是在这里寻求帮助,因为我对编程的某些部分不熟悉......
  • 在下面查看我的答案

标签: javascript angular typescript tensorflow.js


【解决方案1】:

与其创建一个对象来填充dataArr,不如使用一个数组

if (data.length == headerLength) {

    let csvRecord: number[] = [];

  //  csvRecord.timestep = Number(data[0].trim());
    csvRecord.push(Number(data[1].trim()));
    csvRecord.push(Number(data[2].trim()));
    csvRecord.push(Number(data[3].trim()));

    dataArr.push(csvRecord);
  }

然后要从dataArr 创建张量,您可以使用

tf.tensor(dataArr)

使用tf.tensor,它将创建一个形状为[dataArr.length, 3]的张量

但是如果dataArr 是一个大数组,尝试直接创建它的张量会导致内存问题,因为在计算过程中开始使用时,整个数据将直接上传到张量后端。这个answer 讨论了在创建张量时如何处理大数据。

【讨论】:

  • 谢谢,这帮了大忙——还有关于如何处理大型数据集的链接! :) 你有什么想法,我如何将这个形状的张量转换为形状 [any,60,3] 的张量?所以我的算法需要 60 个数据点的批次,其中包含 x 轴、y 轴、z 轴数据。并且任何取决于整个数据集(例如,如果我有 36o 个数据点,则形状将为 [6,60,3]
  • 您可以使用tensor.reshape([-1, 60, 3])。但是,要使重塑工作,您需要有多个 60 * 3 = 180 的数据倍数
猜你喜欢
  • 2022-08-03
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多