javascript - 如何将角度数据转换为正确的张量格式?
问题描述
我正在做一个机器学习项目,我正在尝试用 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;
}
解决方案
与其创建要填充的对象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);
}
然后创建一个张量 out dataArr
,你可以使用
tf.tensor(dataArr)
使用tf.tensor
,它将创建一个形状的张量[dataArr.length, 3]
但是如果dataArr
是一个大数组,尝试直接创建它的张量会导致内存问题,因为在计算过程中开始使用时,整个数据将直接上传到张量后端。这个答案讨论了在创建张量时如何处理大数据。
推荐阅读
- excel - Excel - 日期 - vba 文本框到表格
- python - PYQT QTimer 不启动
- java - java.lang.ClassNotFoundException: com.johnsnowlabs.nlp.DocumentAssembler spark 在 Pycharm 与 conda env
- python - Visual Studio 不运行我的 Python 脚本/调用定义的函数不起作用
- python - 装饰带有参数的函数未按预期工作
- accessibility - 将焦点转移到通过按钮单击添加的输入
- php - Trait 方法 customizeSlugEngine 尚未应用,因为与 App\Base\SluggableModel 上的其他 trait 方法有冲突
- hex - 创建十六进制 MAC 地址
- swift - 对未实现协议的 RestAPI 客户端进行单元测试
- c# - 如果 smtp 服务器需要身份验证,我可以签入 MailKit 吗?