javascript - 在 Tensorflow.js 的 model.evaluate 方法中使用来自 tf.data.csv 的数据时出现问题
问题描述
如何在 Tensorflow.js 的评估方法“evaluate()”中使用“tf.data.csv”的返回值?
我想在 TFJS 上训练一个简单的模型。首先,我从 CSV 文件中读取数据。然后我训练了模型,最后我计算了损失和准确率。但我无法测量由“tf.data.csv”导入的测试数据集的准确性。
<html>
<head></head>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"></script>
<script lang="js">
async function run(){
const trainingUrl = 'wdbc-train.csv';
const trainingData = tf.data.csv(trainingUrl, {
columnConfigs: {
diagnosis:{
isLabel: true
}
}
});
const numOfFeatures = (await trainingData.columnNames()).length - 1;
const numOfSamples= 455
const convertedData =
trainingData.map(({xs, ys}) => {
const labels = [
ys.diagnosis == 1 ? 1 : 0
]
return{ xs: Object.values(xs), ys: Object.values(labels)};
}).batch(20);
const testingUrl = 'wdbc-test.csv';
const testingData = tf.data.csv(testingUrl, {
columnConfigs: {
diagnosis:{
isLabel: true
}
}
});
const convertedTestingData = // YOUR CODE HERE
testingData.map(({xs, ys}) => {
const labels = [
ys.diagnosis == 1 ? 1 : 0
]
return{ xs: Object.values(xs), ys: Object.values(labels)};
}).batch(10);
const numOfTestFeatures = (await testingData.columnNames()).length - 1;
const a =testingData.toArray()
console.log(a)
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [numOfFeatures], activation: "relu", units: 10}));
model.add(tf.layers.dense({inputShape: 10 , activation: "relu", units: 10}));
model.add(tf.layers.dense({activation: "sigmoid", units: 1}));
model.compile({loss: "binaryCrossentropy", optimizer: tf.train.rmsprop(0.05),metrics: "accuracy"});
await model.fitDataset(convertedData,
{epochs:2,
callbacks:{
onEpochEnd: async(epoch, logs) =>{
console.log("Epoch: " + epoch + " Loss: " + logs.loss );
}
}});
const result = model.evaluateDataset(convertedData,{batchSize: 10});
console.log("Accuracy: " + result);
await model.save('downloads://my_model');
}
run();
</script>
<body>
</body>
</html>
解决方案
tf.data.csv
返回一个tf.data.Dataset
。该evaluate
方法需要一个tensor
或一个数组tensor
。如果您想评估 a ,可以使用tf.data.Dataset
该方法。evaluateDataset
evaluateDataset
返回一个承诺。
const data = await model.evaluateDataset(testingData)
// data can be a tf.Scalar or an array of tf.Scalar
推荐阅读
- wordpress - 重写 URL 在自定义帖子类型中不起作用
- matplotlib - 为图形添加图例
- azure - 使用 Azure Devops 更新 .net 核心中的 appsettings.json 值
- java - 如何从多个 yaml 文件(每个 yaml 文件具有不同的架构)中检索固定键的值?
- postgresql - Postgres 函数创建唯一字符串并插入表中
- mysql - MySQL 更新,但删除重复键(由于唯一索引)
- python - 读取 CSV 列,如果满足要求,写入单元格
- python - 如何提高深度学习中的准确性和验证准确性
- java - K8 容器编排:JVM 不释放内存
- javascript - 如何在这种情况下使用 Jest 测试 Express 路由器 catch 分支?