我通过 tensorflow 预测了博客的粉丝数

news/2024/12/13 4:57:57/

前言:

由于最近接触了 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><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>粉丝数量预测</title></head><body><buttononclick="download()">保存模型</button></body><scriptsrc="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). 运行效果


http://www.ppmy.cn/news/21929.html

相关文章

redis加锁的几种方法

1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令INCR 这种加锁的思路是&#xff0c; key 不存在&#xff0c;那么 key 的值会先被初始化为 0 &#xff0c;然后再执行 INCR 操作进行加一。 然后其它用户在执行 INCR 操作进行加一时&#xff0c;…

WebRTC SDP协议--新属性

一 Plan B、Unified Plan Unified Plan&#xff1a;每路视频流都有一个mvideo的描述。比如&#xff1a;有2路视频&#xff0c;有2个mvideo。 Plan B&#xff1a;无论几路流&#xff0c;只有1个mvideo。 描述不了的情况&#xff1a;ssrc对应的编码格式不同&#xff0c;一个H26…

mysql global index_mysql_fullindex全文索引

MySQL 5.7.6 开始&#xff0c;引入了一个 ngram 全文分析器支持汉语无空格分隔符 事实上&#xff0c;MyISAM 存储引擎对全文索引的支持有很多的限制&#xff0c;例如表级别锁对性能的影响、数据文件的崩溃、崩溃后的恢复等&#xff0c;这使得 MyISAM 的全文索引对于很多的应用…

【C++】内联函数

【C】内联函数 文章目录【C】内联函数1、内联函数概念2、内联函数的特性2.1 空间与时间2.2 忽略的内联函数2.3 声明和定义3、总结1、内联函数概念 函数是一个可以重复使用的代码块&#xff0c;CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数…

Spring中@NotEmpty、@NotBlank、@NotNull 区别和使用

1&#xff1a;引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.5.RELEASE</version></dependency> NotEmpty、NotBlank、NotNull 包的位置…

QT opencv 学习day02 基本数据结构 point Scalar Size Rect Mat 等等

1.point &#xff08;画点&#xff09; 1. 函数原型&#xff1a; //二维的点 typedef Point_<int> Point2i; typedef Point_<int64> Point2l; typedef Point_<float> Point2f; typedef Point_<double> Point2d; typedef Point2i Point;//三维的点…

Go编程规范和性能调优(三)——规范编码和性能优化

文章目录一、本次学习重点内容&#xff1a;二、详细知识点介绍&#xff1a;1、高质量编程简介什么是高质量&#xff1f;编程原则&#xff1a;2、编码规范注释&#xff1a;代码格式&#xff1a;命名规范变量&#xff1a;函数&#xff1a;package&#xff1a;错误和异常处理&…

node标签使用

pkg “mypackage”——节点包。 type “nodetype”——节点类型。必须有一个具有相同名称的相应可执行文件。 name “nodename”——节点基名称。注意&#xff1a;name不能包含命名空间。请改用ns属性。 args “arg1 arg2 arg3” ——传递参数到节点。 machine “machine-name”…