热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:TensorFlow.js机器学习教程穿梭于浏览器与node间

篇首语:本文由编程笔记#小编为大家整理,主要介绍了TensorFlow.js机器学习教程-穿梭于浏览器与node间相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了TensorFlow.js机器学习教程 - 穿梭于浏览器与node间相关的知识,希望对你有一定的参考价值。






TensorFlow.js机器学习教程(1) - 穿梭于浏览器与node间

前端同学学习机器学习,面对汗牛充栋的基于Python的各种教程,虽然不见得不懂Python,但是因为不是后端,想把学到的知识用到工作中还是有一段距离。
Python确实在机器学习和深度学习领域有着不可替代的生态优势,不过,放到浏览器端和手机端,Python的生态优势好像就发挥不出来了。不管是android手机还是ios手机,默认都没有Python运行环境,也写不了Python应用。浏览器里和小程序里,就更没Python什么事儿了。

在浏览器里,可以直接使用TensorFlow.js库,尽管可能会有性能的问题,但是至少是从0到1的突破。

我们看个例子:

html>
<html>
<head>
<meta encoding&#61;"UTF-8"/>
<script src&#61;"https://cdn.jsdelivr.net/npm/&#64;tensorflow/tfjs&#64;3.6.0/dist/tf.min.js">script>
head>
<body>
<div id&#61;"tf-display">div>
<script>
let a &#61; tf.tensor1d([1.0]);
let d1 &#61; document.getElementById("tf-display");
d1.innerText &#61; a;
script>
body>
html>

可以看到&#xff0c;在浏览器里显示了一个值为1.0的张量的值。我们的第一个TensorFlow.js(以下简称tf.js)应用就算是跑通了。通过引用tf.js的库&#xff0c;我们就可以调用tf下面的函数。

下面我们修改一下&#xff0c;看看tf.js是靠什么技术在运行的。我们通过tf.getBackend()函数来查看支持tf.js


<html>
<head>
<meta encoding&#61;"UTF-8"/>
<script src&#61;"https://cdn.jsdelivr.net/npm/&#64;tensorflow/tfjs&#64;3.6.0/dist/tf.min.js">script>
head>
<body>
<div id&#61;"tf-display">div>
<div id&#61;"tf-backend">div>
<script>
let a &#61; tf.tensor1d([1.0,2.0,3.0]);
let d1 &#61; document.getElementById("tf-display");
d1.innerText &#61; a;
let backend &#61; tf.getBackend();
let div_backend &#61; document.getElementById("tf-backend");
div_backend.innerText &#61; backend;
script>
body>
html>

在我的浏览器里&#xff0c;tf.js是使用webgl来进行计算的。


运行在node里的tfjs

作为一个js库&#xff0c;tf.js当然也可以运行在node环境里。我们可以通过

npm install &#64;tensorflow/tfjs

来安装tf.js库。

然后把上面网页里面的代码移值过来&#xff1a;

const tf &#61; require(&#39;&#64;tensorflow/tfjs&#39;);
let a &#61; tf.tensor1d([1.0,2.0,3.0]);
console.log(a);
console.log(tf.getBackend());

在我的电脑里执行&#xff0c;这个getBackend()返回的是’cpu’.
tf.js还会给tfjs-node做个广告&#xff1a;

&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
Hi there &#x1f44b;. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C&#43;&#43;, by running npm i &#64;tensorflow/tfjs-node, or npm i &#64;tensorflow/tfjs-node-gpu if you have CUDA. Then call require(&#39;&#64;tensorflow/tfjs-node&#39;); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;

听人劝吃饱饭&#xff0c;那我们就换成tfjs-node吧&#xff1a;

const tf &#61; require(&#39;&#64;tensorflow/tfjs-node&#39;);
let a &#61; tf.tensor1d([1.0,2.0,3.0]);
console.log(a);
console.log(tf.getBackend());

记得要

npm install &#64;tensorflow/tfjs-node

现在&#xff0c;后端从cpu换成了tensorflow。

还有更凶残的&#xff0c;我们还可以换成tfjs-node-gpu来使用GPU&#xff1a;

const tf &#61; require(&#39;&#64;tensorflow/tfjs-node-gpu&#39;);
let a &#61; tf.tensor1d([1.0,2.0,3.0]);
console.log(a);
console.log(tf.getBackend());

在没有GPU的机器上&#xff0c;会使用CPU版的tensorflow作为后端&#xff0c;不会报错。


使用tfjs预测波士顿房价

按照国际惯例&#xff0c;我们的tfjs机器学习之旅也从预测房价开始。

我们先搞个node里运行的版本&#xff0c;这样我们可以使用tf.data.csv去读取csv数据。而在浏览器里&#xff0c;我们就得求助于强大的papaparser之类的库了。

首先我们先指定数据的URL&#xff0c;直接为网上的地址&#xff1a;

const csvUrl &#61;
&#39;https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv&#39;;

我们要预测的是房价中位数medv字段&#xff0c;先定义好&#xff1a;

const csvDataset &#61; tf.data.csv(
csvUrl, {
columnConfigs: {
medv: {
isLabel: true
}
}
});

然后转换一下格式&#xff1a;

// Number of features is the number of column names minus one for the label
// column.
const numOfFeatures &#61; (await csvDataset.columnNames()).length - 1;
// Prepare the Dataset for training.
const flattenedDataset &#61;
csvDataset
.map(({xs, ys}) &#61;>
{
// Convert xs(features) and ys(labels) from object form (keyed by
// column name) to array form.
return {xs:Object.values(xs), ys:Object.values(ys)};
})
.batch(10);

线性回归就是没有隐藏层的一层。输入是numOfFeatures个元素&#xff0c;输出是1个元素&#xff1a;

const model &#61; tf.sequential();
model.add(tf.layers.dense({
inputShape: [numOfFeatures],
units: 1
}));

最后设置优化算法、学习率等参数&#xff0c;编译运行就好了&#xff1a;

model.compile({
optimizer: tf.train.sgd(0.000001),
loss: &#39;meanSquaredError&#39;
});
return model.fitDataset(flattenedDataset, {
epochs: 10,
callbacks: {
onEpochEnd: async (epoch, logs) &#61;> {
console.log(epoch &#43; &#39;:&#39; &#43; logs.loss);
}
}
});

其中说一下callbacks吧&#xff0c;支持一些生命周期的回调。除了onEpochEnd&#xff0c;还有onEpochBegin, onTrainBegin, onTrainEnd等&#xff1a;

return model.fitDataset(flattenedDataset, {
epochs: 10,
callbacks: {
onEpochEnd: async (epoch, logs) &#61;> {
console.log(epoch &#43; &#39;:&#39; &#43; logs.loss);
},
onTrainBegin: async(logs) &#61;> {
console.log("Train Begin!");
},
onTrainEnd: async(logs) &#61;> {
console.log(&#39;Train End!&#39;);
}
}
});

用Node运行&#xff0c;就可以看到训练的过程了&#xff1a;

Train Begin!
Epoch 1 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
1124ms 41639us/step - loss&#61;1445.89
0:1445.89404296875
Epoch 2 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
1002ms 37093us/step - loss&#61;254.11
1:254.1094970703125
Epoch 3 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
989ms 36618us/step - loss&#61;250.23
2:250.233642578125
Epoch 4 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
965ms 35746us/step - loss&#61;246.57
3:246.57472229003906
Epoch 5 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
974ms 36056us/step - loss&#61;243.12
4:243.11817932128906
Epoch 6 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
955ms 35358us/step - loss&#61;239.85
5:239.85049438476562
Epoch 7 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
963ms 35659us/step - loss&#61;236.76
6:236.75921630859375
Epoch 8 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
942ms 34904us/step - loss&#61;233.83
7:233.83265686035156
Epoch 9 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
963ms 35650us/step - loss&#61;231.06
8:231.05992126464844
Epoch 10 / 10
eta&#61;0.0 &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>
920ms 34064us/step - loss&#61;228.43
9:228.43093872070312
Train End!

完整的代码如下&#xff1a;

const tf &#61; require(&#39;&#64;tensorflow/tfjs-node&#39;);
const csvUrl &#61;
&#39;https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv&#39;;
async function run() {
// We want to predict the column "medv", which represents a median value of
// a home (in $1000s), so we mark it as a label.
const csvDataset &#61; tf.data.csv(
csvUrl, {
columnConfigs: {
medv: {
isLabel: true
}
}
});
// Number of features is the number of column names minus one for the label
// column.
const numOfFeatures &#61; (await csvDataset.columnNames()).length - 1;
// Prepare the Dataset for training.
const flattenedDataset &#61;
csvDataset
.map(({xs, ys}) &#61;>
{
// Convert xs(features) and ys(labels) from object form (keyed by
// column name) to array form.
return {xs:Object.values(xs), ys:Object.values(ys)};
})
.batch(10);
// Define the model.
const model &#61; tf.sequential();
model.add(tf.layers.dense({
inputShape: [numOfFeatures],
units: 1
}));
model.compile({
optimizer: tf.train.sgd(0.000001),
loss: &#39;meanSquaredError&#39;
});
// Fit the model using the prepared Dataset
return model.fitDataset(flattenedDataset, {
epochs: 10,
callbacks: {
onEpochEnd: async (epoch, logs) &#61;> {
console.log(epoch &#43; &#39;:&#39; &#43; logs.loss);
},
onTrainBegin: async(logs) &#61;> {
console.log("Train Begin!");
},
onTrainEnd: async(logs) &#61;> {
console.log(&#39;Train End!&#39;);
}
}
});
}
run();

在浏览器里预测波士顿房价

boston

运行在浏览器里&#xff0c;上面的核心算法都不用变&#xff0c;只是对数据处理和UI的部分要复杂一些。

csv读取我们换用强大的papaparser:

export const loadCsv &#61; async (filename) &#61;> {
return new Promise(resolve &#61;> {
const url &#61; &#96;${BASE_URL}${filename}&#96;;
console.log(&#96; * Downloading data from: ${url}&#96;);
Papa.parse(url, {
download: true,
header: true,
complete: (results) &#61;> {
resolve(parseCsv(results[&#39;data&#39;]));
}
})
});
};

模型还是那个模型&#xff1a;

export function linearRegressionModel() {
const model &#61; tf.sequential();
model.add(tf.layers.dense({inputShape: [bostonData.numFeatures], units: 1}));
model.summary();
return model;
};

compile的过程也是一样的&#xff1a;

model.compile(
{optimizer: tf.train.sgd(LEARNING_RATE), loss: &#39;meanSquaredError&#39;});

训练的过程因为要更新UI变得更复杂了一些&#xff1a;

await model.fit(tensors.trainFeatures, tensors.trainTarget, {
batchSize: BATCH_SIZE,
epochs: NUM_EPOCHS,
validationSplit: 0.2,
callbacks: {
onEpochEnd: async (epoch, logs) &#61;> {
await ui.updateModelStatus(
&#96;Epoch ${epoch &#43; 1} of ${NUM_EPOCHS} completed.&#96;, modelName);
trainLogs.push(logs);
tfvis.show.history(container, trainLogs, [&#39;loss&#39;, &#39;val_loss&#39;])
...
}
}
});
ui.updateStatus(&#39;Running on test data...&#39;);
const result &#61; model.evaluate(
tensors.testFeatures, tensors.testTarget, {batchSize: BATCH_SIZE});
const testLoss &#61; result.dataSync()[0];

浏览器里的完整代码请参看&#xff1a;https://github.com/tensorflow/tfjs-examples/blob/master/boston-housing/&#xff0c;这里希望更多给大家一个宏观的印象&#xff0c;就不深入细节了。






推荐阅读
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
author-avatar
zxy寒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有