如何在tensorflow.js中标记三维数据

如何在tensorflow.js中标记三维数据,tensorflow.js,Tensorflow.js,我有一个三维数据来拟合tensorflow.js模型。但是我尝试过的代码没有显示任何值,也没有显示任何错误。我不知道如何准确地将标签指定给特征。我该如何处理三维数据呢?带型号的完整代码附在下面 更新 import React from 'react'; import {View, Text, StyleSheet} from 'react-native'; import * as tf from '@tensorflow/tfjs'; import '@tensorfl

我有一个三维数据来拟合tensorflow.js模型。但是我尝试过的代码没有显示任何值,也没有显示任何错误。我不知道如何准确地将标签指定给特征。我该如何处理三维数据呢?带型号的完整代码附在下面

更新

 import React from 'react';
    import {View, Text, StyleSheet} from 'react-native';
    import * as tf from '@tensorflow/tfjs';
    import '@tensorflow/tfjs-react-native';
    export default class App extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          isTfReady: false,
        };
      }
      init() {
        const model = tf.sequential({
            layers: [
                tf.layers.dense({
                    inputShape: [784],
                    units: 32,
                    activation: "relu"
                }),
                tf.layers.dense({
                    units: 10,
                    activation: "softmax"
                })
            ]
        });

    model.compile({
        optimizer: "sgd",
        loss: "categoricalCrossentropy",
        metrics: ["accuracy"] 
    });  

    featureTensor = tf.tensor2d([[1],[2],[4]])
    featureTensor1 = tf.tensor2d([[2],[1],[3]])
    featureTensor2 = tf.tensor2d([[3],[2],[1]])  

    featuresTensor = tf.stack([featureTensor, featureTensor1, featureTensor2]) 
    const labelArray = ["standing", "sitting"]
    // {standing: 0, sitting: 1}
    const mapIndexLabel = Object.fromEntries(Object.entries({...labelArray}).map(([a, b]) => [b, +a])) 
    labelsTensor = tf.onehot([0, 1, 1], numberOfUniqueLabels) // numberOfUniqueLabels = 2 in this case

    function onBatchEnd(batch, logs) {
      logs.acc = parseFloat((logs.acc * 100).toFixed(2));
      logs.loss = parseFloat((logs.loss * 100).toFixed(3));
      console.log("Accuracy", logs.acc);
    }
    // Train for 5 epochs with batch size of 32.
    model
        .fit(featuresTensor, labelsTensor, {
            epochs: 10,
            batchSize: 32,
            callbacks: {
                onBatchEnd
            }
        })
        .then(info => {
          this.setState({info: info })
          history = model.fit(featuresTensor, labelsTensor, {
            });
            console.log("Final accuracy", info.history.acc);
        });
  }
  async componentDidMount() {

    await tf.ready();
    this.init()
    // Signal to the app that tensorflow.js can now be used.
    this.setState({
      isTfReady: true,
    });
  }
  render() {
    const {info} = this.state; 
    return (
      <View style={styles.output}>
        {info && info.history.acc.map(i=>(<Text>{i}</Text>))}
      </View>
    )
  }
}
const styles = StyleSheet.create({

  output: {
  flexDirection: 'column',
  //   alignItems: 'center',
    marginTop: 50,
  },
})
从“React”导入React;
从“react native”导入{View,Text,StyleSheet};
从“@tensorflow/tfjs”导入*作为tf;
导入“@tensorflow/tfjs react native”;
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
此.state={
伊斯特弗雷迪:错,
};
}
init(){
常量模型=tf.sequential({
图层:[
致密的({
inputShape:[784],
单位:32,
激活:“relu”
}),
致密的({
单位:10,,
激活:“softmax”
})
]
});
model.compile({
优化器:“sgd”,
损失:“分类交叉熵”,
指标:[“准确性”]
});  
featureTensor=tf.tensor2d([[1]、[2]、[4]])
featureTensor1=tf.tensor2d([[2]、[1]、[3]]))
featureTensor2=tf.tensor2d([[3]、[2]、[1]]))
featureTensor=tf.stack([featureTensor,featureTensor1,featureTensor2])
常量标签=[“站着”、“坐着”]
//{站着:0,坐着:1}
const mapIndexLabel=Object.fromEntries(Object.entries({…labelArray}).map([a,b])=>[b,+a]))
labelsTensor=tf.onehot([0,1,1],numberOfUniqueLabels)//numberOfUniqueLabels=2在本例中
函数onBatchEnd(批处理、日志){
logs.acc=parseFloat((logs.acc*100).toFixed(2));
logs.loss=parseFloat((logs.loss*100).toFixed(3));
console.log(“准确性”,logs.acc);
}
//培训5个时代,批量大小为32。
模型
.fit(功能拉伸器、标签拉伸器、{
纪元:10,
批量大小:32,
回调:{
onBatchEnd
}
})
。然后(信息=>{
this.setState({info:info})
历史=模型拟合(特征拉伸器、标签拉伸器、{
});
控制台日志(“最终准确性”,信息历史记录acc);
});
}
异步组件didmount(){
等待tf.ready();
this.init()
//向应用程序发出tensorflow.js现在可以使用的信号。
这是我的国家({
伊斯特弗雷迪:是的,
});
}
render(){
const{info}=this.state;
返回(
{info&&info.history.acc.map(i=>({i}))}
)
}
}
const styles=StyleSheet.create({
输出:{
flexDirection:'列',
//对齐项目:“居中”,
玛金托普:50,
},
})
我有一个三维数据来拟合tensorflow.js

它不是三维数据,而是二维数据
tf.tensor3d([[1]、[2]、[4]])
将无法构建三维张量,从而引发错误。为了构造特征张量,可以使用
tf.tensor
——它将从数据本身推断形状;或者,您可以使用tf.tensor2d以便于阅读

featureTensor = tf.tensor2d([[1],[2],[4]])
第二件需要提及的事情是,在最后一层之前需要有一个展平层,以允许模型输出为一维

至于回调,需要在给定某个事件的情况下调用它

const model = tf.sequential({
            layers: [
                tf.layers.dense({
                    inputShape: [3, 1],
                    units: 32,
                    activation: "relu"
                }),
                tf.layers.flatten(),
                tf.layers.dense({
                    units: 2,
                    activation: "softmax"
                })
            ]
        });

    model.compile({
        optimizer: "sgd",
        loss: "categoricalCrossentropy",
        metrics: ["accuracy"] 
    });  

    featureTensor = tf.tensor2d([[1],[2],[4]])
    featureTensor1 = tf.tensor2d([[2],[1],[3]])
    featureTensor2 = tf.tensor2d([[3],[2],[1]])  

    featuresTensor = tf.stack([featureTensor, featureTensor1, featureTensor2]) 
    const labelArray = ["standing", "sitting"]
    // {standing: 0, sitting: 1}
    const mapIndexLabel = {standing: 0, sitting: 1}
    labelsTensor = tf.oneHot([0, 1, 1], 2) // numberOfUniqueLabels = 2 in this case

    function onBatchEnd(batch, logs) {
      logs.acc = parseFloat((logs.acc * 100).toFixed(2));
      logs.loss = parseFloat((logs.loss * 100).toFixed(3));
      console.log("Accuracy", logs.acc);
    }

model.summary()
    // Train for 5 epochs with batch size of 32.
featuresTensor.print()
labelsTensor.print()
 hist = await  model
        .fit(featuresTensor, labelsTensor, {
 callbacks: {onEpochEnd: onBatchEnd }
 })
console.log(hist)
我有一个三维数据来拟合tensorflow.js

它不是三维数据,而是二维数据
tf.tensor3d([[1]、[2]、[4]])
将无法构建三维张量,从而引发错误。为了构造特征张量,可以使用
tf.tensor
——它将从数据本身推断形状;或者,您可以使用tf.tensor2d以便于阅读

featureTensor = tf.tensor2d([[1],[2],[4]])
第二件需要提及的事情是,在最后一层之前需要有一个展平层,以允许模型输出为一维

至于回调,需要在给定某个事件的情况下调用它

const model = tf.sequential({
            layers: [
                tf.layers.dense({
                    inputShape: [3, 1],
                    units: 32,
                    activation: "relu"
                }),
                tf.layers.flatten(),
                tf.layers.dense({
                    units: 2,
                    activation: "softmax"
                })
            ]
        });

    model.compile({
        optimizer: "sgd",
        loss: "categoricalCrossentropy",
        metrics: ["accuracy"] 
    });  

    featureTensor = tf.tensor2d([[1],[2],[4]])
    featureTensor1 = tf.tensor2d([[2],[1],[3]])
    featureTensor2 = tf.tensor2d([[3],[2],[1]])  

    featuresTensor = tf.stack([featureTensor, featureTensor1, featureTensor2]) 
    const labelArray = ["standing", "sitting"]
    // {standing: 0, sitting: 1}
    const mapIndexLabel = {standing: 0, sitting: 1}
    labelsTensor = tf.oneHot([0, 1, 1], 2) // numberOfUniqueLabels = 2 in this case

    function onBatchEnd(batch, logs) {
      logs.acc = parseFloat((logs.acc * 100).toFixed(2));
      logs.loss = parseFloat((logs.loss * 100).toFixed(3));
      console.log("Accuracy", logs.acc);
    }

model.summary()
    // Train for 5 epochs with batch size of 32.
featuresTensor.print()
labelsTensor.print()
 hist = await  model
        .fit(featuresTensor, labelsTensor, {
 callbacks: {onEpochEnd: onBatchEnd }
 })
console.log(hist)

tf.tensor3d([[1]、[2]、[4]])
将抛出错误<代码>[[1]、[2]、[4]是二维张量的形状。形状是
[3,1]
tf。tensor3d([[1]、[2]、[4]])
将抛出错误<代码>[[1]、[2]、[4]是二维张量的形状。形状是
[3,1]
我做了,但它仍然是空的。。。没有输出可能是模型定义中存在其他错误。你能用模型本身更新你的问题吗?模型和我以前工作的一样。。。。嗯,我更新了问题我是对的,它不起作用。您的模型需要一个形状为[784]的特征张量。但是你正在传递一个形状为[3,1]的张量。我想若你们打开你们的控制台,你们会看到一个错误,指出为什么它不工作,如何选择输入形状的值。。。我必须添加近200个功能,我做了,但它仍然是空白。。。没有输出可能是模型定义中存在其他错误。你能用模型本身更新你的问题吗?模型和我以前工作的一样。。。。嗯,我更新了问题我是对的,它不起作用。您的模型需要一个形状为[784]的特征张量。但是你正在传递一个形状为[3,1]的张量。我想若你们打开你们的控制台,你们会看到一个错误,指出为什么它不工作,如何选择输入形状的值。。。我必须再添加近200个功能