首页 > 其他分享 >我通过 tensorflow 预测了博客的粉丝数

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

时间:2023-02-22 13:55:40浏览次数:57  
标签:粉丝 博客 tf tensorflow model tfjs const

前言:

         由于最近接触了 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). 运行效果

 

 

 

标签:粉丝,博客,tf,tensorflow,model,tfjs,const
From: https://www.cnblogs.com/zerofc/p/17144082.html

相关文章

  • 我的Github-博客左上角可一键进入
    我的Github主页网址:https://github.com/BXF-Aurora168博客左上角可一键进入  github我很早就注册了,只是由于访问速度的问题一直没有使用。使用Steamcommunity30......
  • 每日博客2023/2/21
    今天上课,上口语课,和两个美女坐同桌,打破了自高一分班之后没和女生坐同桌的记录(高兴了一会),然后上了数据库,听了杨子光老师的讲解,虽然现在忘了讲了什么,但是听到很认真,了解了数......
  • 软件工程第二周开课博客
    第一周的博客作业1.介绍自己我是一名大二学生,今天是大二下学期的第二周。平时的爱好就是看看一些经典的影视剧作品(绿里,楚门,狂飙,肖申客等等),练习剑道(就是日本人流行的......
  • 软件工程开课博客
    现状:在上学期的学习中,由于疫情的原因,以及我本人强烈的惰性,在java的学习中并没有用尽全力,而是浅尝辄止,导致我先现在的基础十分薄弱,需要在下学期对我的知识进行一个补全计......
  • 2.21博客园
    博客园2月21日今天我在昨天基础上,继续写了add的数据jsp和显示jsp完成了老师昨天的任务,实现了项目的增和浏览功能。另外我还在今天杨子光老师的数据库课上学到了很多专业知......
  • 2023.2.21 我的第一篇博客——软件工程学习心得体会
    今天是我第一次在博客园写博客,本人目前是上海海洋大学软件工程系大二在读,第一篇博客就聊聊我这一年半对软件工程学习的感想吧。编程语言方面,大一学习了C和C++,大二上学期学......
  • 2.21号每日博客——安卓
      学习安卓开发,下载软件。  今天在菜鸟教程上学习了,Android的基础入门教程,为几个月后的外包杯做准备。   今天只是学习如何搭建开发环境。先是下载JDK,如何......
  • 使用GitHub Pages托管你的博客
    必备条件在Node.js官网下载软件并安装在Git官网下载软件并安装一个GitHub账号,可以在GitHub进行注册安装hexo所有必备的应用程序安装完成后,即可使用npm安装Hexo。......
  • Tensorflow中常用的卷积函数
    卷积函数(1)计算N维卷积的和tf.nn.convolution(input,filter,padding,strides=None,dilation_rate=None,name=None,data_format=None)(2)对一个四维的输入数据input和卷积核......
  • Tensorflow中常用的池化函数
    池化函数在神经网络中,池化函数一般跟在卷积函数的下一层,池化操作是利用一个矩阵窗口在张量上进行扫描,将每个矩阵窗口中的值通过最大值或者平均值来减少元素的个数,每个池化操......