如何转换 angular 中的数据以更正张量格式?
How to transform data in angular to correct tensor format?
我正在做一个机器学习项目,我正在尝试使用 angular 部署我的算法。
我已经正确上传了预训练模型,并且设法从 csv 上传数据,但现在我无法将我拥有的数据正确转换为正确的张量格式。
我的模型是一个 LSTM 神经网络,它期望加速度计数据(x 轴、y 轴和 z 轴)长度为 60 的时间窗来预测人类活动,因此张量格式为 [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 class
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);
}
然后要从 dataArr
中创建一个张量,您可以使用
tf.tensor(dataArr)
使用tf.tensor
,它将创建一个形状为[dataArr.length, 3]
的张量
但是如果dataArr
是一个大数组,试图直接创建它的张量会导致内存问题,因为在计算过程中开始使用时,整个数据将直接上传到张量后端。 讨论创建张量时如何处理大数据。
我正在做一个机器学习项目,我正在尝试使用 angular 部署我的算法。 我已经正确上传了预训练模型,并且设法从 csv 上传数据,但现在我无法将我拥有的数据正确转换为正确的张量格式。 我的模型是一个 LSTM 神经网络,它期望加速度计数据(x 轴、y 轴和 z 轴)长度为 60 的时间窗来预测人类活动,因此张量格式为 [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 class
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);
}
然后要从 dataArr
中创建一个张量,您可以使用
tf.tensor(dataArr)
使用tf.tensor
,它将创建一个形状为[dataArr.length, 3]
但是如果dataArr
是一个大数组,试图直接创建它的张量会导致内存问题,因为在计算过程中开始使用时,整个数据将直接上传到张量后端。