前言:

由于最近接触了 tensorflow.js,出于试一下的心态,想通过线性回归预测一下博客的粉丝走向和数量,结果翻车了。虽然场景用错地方,但是整个实战方法用在身高体重等方面的预测还是有可行性,所以就记录下来了。

需求:

根据某博客或论坛,抓取一下博主的访问总量和粉丝总量,分析其关联,训练数据,最后通过输入指定访问数量预测吸粉总数。

Tensorflow.js:

Tensorflow.js 是一个可以在浏览器或 Node 环境利用 JavaScript 语法运行深度学习。让前端就可以实现类似根据图片类型的模糊搜索,语音识别控制网页,图片的人像识别等功能,既减轻服务器训练压力,也保护了用户隐私 (在特殊场景下,不用将图片传到服务器后做人像标识)。

技术清单:

1. tensorflow.js

2. parcel

3. tfjs-vis

实战:

实战是需要本地有 Node 环境,并且安装了 npm 等包管理工具,关于这些的安装这里就略过了。主要是项目的搭起,线性回归的编码以及运行结果。

1. 项目搭建

(1). 创建项目目录和 package.json

{
"name": "tensorflow-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"@tensorflow-models/speech-commands": "^0.4.0",
"@tensorflow/tfjs": "^1.3.1",
"@tensorflow/tfjs-node": "^1.2.9",
"@tensorflow/tfjs-vis": "^1.2.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"browserslist": [
"last 1 Chrome version"
]
}

(2). 切换到当前目录,运行 npm install 进行安装

(3). 在当前目录下创建目录和运行文件。

(4). 安装 parcel,一个打包工具。

npm install -g parcel-bundler

2. 编码

(1). 页面需要有数据训练过程图和模型下载按钮。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>粉丝数量预测</title>
</head>
<body>
<button onclick="download()">保存模型</button>
</body>
<script src="script.js"></script>
</html>

(2). 线性回归基本流程

(3). 编码

import * as tf from '@tensorflow/tfjs';
import * as tfvis from '@tensorflow/tfjs-vis'; window.onload = async () => { // 浏览量-粉丝量
const flows = [20333,25759,101190,86334,265252,1366198,166114,109979,371423,1291843,1239191,225711,1163189,882702,31415,678478,545108,1304729,73479,2515393,1714555,344847,3147811,1626033,3702785,377376,258472,312769,540292,616665,1207153,2577882,11564515,28231,328984,585611,595275];
const fans = [0,494,6618,3411,12023,7791,65,7109,14014,11840,1202,266,7915,7503,2216,33265,284,34849,4188,41721,25384,1269,62207,20754,192980,28601,7645,1779,13112,10824,4612,548,2311,44,34,259,150]; tfvis.render.scatterplot(
{name: 'csdn浏览量和粉丝量关联'},
{values: flows.map((x, i) => ({x,y:fans[i]}))},
{
xAxisDomain: [20333, 11600000],
yAxisDomain: [0, 200000]
}
); // 对数据集进行归一化处理
const inputs = tf.tensor(flows).sub(20333).div(11544182);
const lables = tf.tensor(fans).div(192980); const model = tf.sequential(); // 给模型添加层级和神经元
//model.add(tf.layers.dense({unit: 1, inputShape: [1]}));
model.add(tf.layers.dense({ units: 1, inputShape: [1] })); // 配置模型训练,设置损失计算函数(均方差等),优化器的SGD配置
model.compile({loss: tf.losses.meanSquaredError, optimizer: tf.train.sgd(0.1)}); // 开始训练
// await model.fit(
// inputs,
// lables,
// {
// batchSize:37,
// epochs:200,
// callbacks: tfvis.show.fitCallbacks(
// {name: '训练过程'},
// ['loss', 'val_loss', 'acc', 'val_acc'],
// { callbacks: ['onEpochEnd'] }
// )
// }
// ); await model.fit(
inputs,
lables,
{
batchSize:37,
epochs:200,
callbacks: tfvis.show.fitCallbacks(
{ name: '训练过程' },
['loss']
)
}
); // 模型预测,输入浏览量输出预测的粉丝数
const output = model.predict(tf.tensor([165265]).sub(20333).div(11544182));
//const output = model.predict(tf.tensor([180]).sub(150).div(20)); alert('165265预测粉丝数'+output.mul(192980).dataSync()[0]); //保存模型
window.download = async () => {
await model.save('downloads://my-model');
} };

(4). 打包并运行

parcel tf_test/index.html

(5). 运行效果

我通过 tensorflow 预测了博客的粉丝数的更多相关文章

  1. C语言博客作业3--函数

    C语言博客作业3--函数 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...

  2. C语言博客作业03--函数

    1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这周最大的收获就是学习函数,并且通过对函数的封装来做成一个简单的小程序,这周做的最有意义的事情就是做了老 ...

  3. 我是如何利用Github Pages搭建起我的博客,细数一路的坑

    1.前言 其实早在这之前我就一直想过写博客,但由于种种原因一直没有去学习这方面的知识,最近半个月(从开始动手到搭建好)一直陆陆续续的在着手这方面的工作.从开始到搭建完成的过程中遇到了很多困难,因为在这 ...

  4. C博客作业03--函数

    1. 本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 这几周学习了函数,题目还是原样只是多了种做题的方法.一开始看书感觉声明,定义啊,还有全局变量那些,文绉 ...

  5. twobin博客样式—“蓝白之风”

    自暑假以来,囫囵吞枣一般蒙头栽入前端自学中,且不说是否窥探其道,却不自觉中提高了对网页版面设计的要求,乃至挑剔.一个设计清爽美观的网页能让读者心旷神怡,甚至没有了阅读疲劳:而一个设计粗劣嘈杂的网页实在 ...

  6. twobin博客样式

    twobin博客样式—“蓝白之风”   自暑假以来,囫囵吞枣一般蒙头栽入前端自学中,且不说是否窥探其道,却不自觉中提高了对网页版面设计的要求,乃至挑剔.一个设计清爽美观的网页能让读者心旷神怡,甚至没有 ...

  7. Github + Hexo 搭建个人博客

    参考博客: 我是如何利用Github Pages搭建起我的博客,细数一路的坑 使用Hexo+Github一步步搭建属于自己的博客(基础) Hexo 准备工作: 本机已安装好 git, npm 和 no ...

  8. 更多内容 - 请关注我的 CSDN 博客

    欢迎关注我的 CSDN 博客 因为粉丝多数是在 CSDN 上,所以更多内容放在了 我的 CSDN 博客: [点击跳转] 地址:https://icode.blog.csdn.net

  9. github+hexo搭建博客

    引言     之前用阿里云弹性web托管采用wordpress搭建的个人博客,经过我使用一段时间之后发现存在很多问题: 网站的响应速度非常慢,估计打开主页需要3-4s的时间,我经过搜索发现很多人都有这 ...

  10. TensorFlow博客翻译——用TensorFlow在云端进行机器学习

    https://github.com/tensorflow/tensorflow 原文地址 Machine Learning in the Cloud, with TensorFlow Wednesd ...

随机推荐

  1. Spring源码:Bean生命周期(三)

    前言 在之前的文章中,我们已经对 bean 的准备工作进行了讲解,包括 bean 定义和 FactoryBean 判断等.在这个基础上,我们可以更加深入地理解 getBean 方法的实现逻辑,并在后续 ...

  2. Pwn系列之Protostar靶场 Stack1题解

    (gdb) disasse main Dump of assembler code for function main: 0x08048464 <main+0>: push ebp 0x0 ...

  3. Python NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...

  4. url函数

    url() 函数看起来的格式象:url(r^/account/$', views.index, name=index),它可以接收四个参数,分别是两个必选参数:regex.view 和两个可选参数:k ...

  5. vscode运行java输出至指定文件夹

    一.前言 最近呢,需要用vscode编写一点小的java程序,也就是单java文件,但是呢,我发现coderunner运行java,一个java文件编译出一个class文件,这也太乱了!不符合我简约的 ...

  6. 【Python】爬虫下载视频

    Python爬虫下载视频 前言 这两天我一时兴起想学习 PS ,于是去我的软件宝库中翻出陈年已久的 PhotoshopCS6 安装,结果发现很真流畅诶! 然后去搜索学习视频,网上的视频大多浮躁,收费, ...

  7. UCOS-II 任务栈空间合理分配

    最近利用空闲时间跑了一下正点原子的stm32f4开发板的实时操作系统demo,发现了一个比较有意思的东西,分享如下: 硬件平台:正点原子stm32f4开发板 软件开发平台:MDK uVision v5 ...

  8. harbor改造为https---血泪史

  9. 代码随想录算法训练营Day53 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day53 动态规划|●  1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 1143.最长公共子序列 题目链接:1143.最长公 ...

  10. R 包 optparse 之命令行参数传递

    对于经常与 Linux 打交道的生物信息分析童鞋们,我们今天分享一下怎么在命令行下通过传递参数(类似perl.python) 的方式执行 R 脚本. 一般来说,命令行下使用 Rscript 执行 R ...