如何在tensorflow.js中标记三维数据
我有一个三维数据来拟合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
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个功能