基于Liuli构建纯净的RSS公众号信息流

如何通过RSS阅读微信公众号文章 阅读详情

首先介绍下,Liuli是什么?这是我最近开发的一个开源项目,主要目的是为了让有阅读习惯的朋友快速构建一个多源、干净、个性化的阅读环境。

为什么叫Liuli?

Liuli原来命名为2C,后面交流群的朋友提供了琉璃这个名字,取自梅尧臣《缑山子晋祠 会善寺》中的琉璃开净界,薜荔启禅关,其寓意也很符合项目的立意:

为用户构建一方阅读净土如东方琉璃净世界

距离上次发布已经过去了一个月(我实在是太拖了,反省),今天很高兴地和大家宣布Liuli又有一大波更新了!🥳 具体见v0.2.0 任务看板[1]。

接下来我将根据Liuli最新版本V0.1.5来给大家介绍下如何基于 Liuli 构建纯净的 RSS 公众号信息流,最终订阅效果展示如下:

d852a0f8913668a9e0fdbe5833327e6e.png

liuli_demo

开始

首先从需求谈起,目前我有三点诉求:

  • 聚合目前订阅的公众号,通过 RSS 输出然后分别订阅

  • 对订阅的文章做广告识别

  • 对文章做一个快速备份

以上诉求正好就是本篇文章的主题构建纯净的 RSS 公众号信息流,具体实现这里不详谈,有兴趣可以在交流群里面交流,本篇文章只说怎么用。

如果你阅读过我之前写的那篇打造一个干净且个性化的公众号阅读环境[2],那么你对采集器、处理器、分发器等概念可能有些了解,但这里为了阅读的连贯性,所以再次介绍下,首先看架构图:

b38e10900ed5599a9b4f32ab23905a68.png
liuli_process

简单解释一下:

  • 采集器:监控各自关注的公众号或者博客等自定义阅读源,以统一标准格式流入Liuli作为输入源;

  • 处理器:对目标内容进行自定义处理,如基于历史广告数据,利用机器学习实现一个广告分类器自动打标签,或者引入钩子函数在相关节点执行等;

  • 分发器:依靠接口层进行数据请求&响应,为使用者提供个性化配置,然后根据配置自动进行分发,将干净的文章流向微信、钉钉、TG 甚至自建网站;

  • 备份器:将处理后的文章进行备份,如持久化到数据库或者 GitHub 等。

其实不了解流程也没关系,知道怎么用就行了,接下来请详细跟着教程一步一步来,最好有台电脑跟着操作。

使用

好,正戏开始。Liuli的部署使用还是很方便的,推荐大家使用Docker进行部署,所以开始前大家手头的设备需要安装好Docker,如果没安装,点击这里进行安装[3]即可。

配置

当前Liuli的配置主要分两大块:

  • 全局配置:就是全局环境变量,相关说明见Liuli 环境变量[4]

  • 任务配置:此配置针对用户需要解决的问题而形成,比如本文就会生成一个将公众号采集、处理、输出成 RSS 的配置(诸位使用时候将我的配置复制过去即可使用)

全局配置

首先说说全局配置,其实默认提供的配置也能让大家跑起来,但是如果你需要将文章分发到微信或者钉钉等,那就需要填写相关配置,好了,让我们开始吧,请打开终端或者用你熟悉的方式,建立一些文件夹或者文件。

mkdir liuli
cd liuli
# 存放调度任务配置,默认命名为default.json
mkdir liuli_config
# 数据库
mkdir mongodb_data
# 下拉 docker-compose 配置
# 如果网络不好请手动填写,内容见附录
wget https://raw.githubusercontent.com/howie6879/liuli/main/docker-compose.yaml
# 配置 pro.env 具体查看全局配置处的Liuli 环境变量
vim pro.env

对于pro.env,想了解详情的话建议查看全局配置[5]处的Liuli环境变量,当然你不想看也没关系,跟着此教程填即可,首先请将以下配置复制到pro.env:

PYTHONPATH=${PYTHONPATH}:${PWD}
LL_M_USER="liuli"
LL_M_PASS="liuli"
LL_M_HOST="liuli_mongodb"
LL_M_PORT="27017"
LL_M_DB="admin"
LL_M_OP_DB="liuli"
LL_FLASK_DEBUG=0
LL_HOST="0.0.0.0"
LL_HTTP_PORT=8765
LL_WORKERS=1
# 上面这么多配置不用改,下面的才需要各自配置
# 请填写你的实际IP
LL_DOMAIN="http://{real_ip}:8765"
# 请填写微信分发配置
LL_WECOM_ID=""
LL_WECOM_AGENT_ID="-1"
LL_WECOM_SECRET=""

假设你和我一样使用微信作为分发终端,只需要通过以下步骤获取以下参数即可:

  • LL_WECOM_ID

  • LL_WECOM_AGENT_ID

  • LL_WECOM_SECRET

获取流程如下,请先随便用手机号注册一个企业微信[6]。

首先创造应用:

7116392a7df9d2c93871c6982e5d2253.png

获取相关 ID:

1fda15d0ebe44c63092a625b863fd06a.png

企业 ID 在我的企业->企业信息->企业ID。

为了方便可以在微信上接收消息,记得开启微信插件,进入下图所在位置,扫码关注你的二维码即可:

eb4b3432ee414061a87b4563abd1d311.png

现在你获取了以下三个参数,请到对应配置填写秘钥即可。

任务配置

任务配置主要是让使用者可以更加个性化地使用Liuli,从而满足用户各种需求,当前Liuli还只能支持公众号采集、过滤、分发、备份操作,也就是本文的核心目的,大家将以下内容复制到liuli_config/default.json即可:

{
    "name": "default",
    "author": "liuli_team",
    "collector": {
        "wechat_sougou": {
            "wechat_list": [
                "老胡的储物柜"
            ],
            "delta_time": 5,
            "spider_type": "playwright"
        }
    },
    "processor": {
        "before_collect": [],
        "after_collect": [{
            "func": "ad_marker",
            "cos_value": 0.6
        }, {
            "func": "to_rss",
            "link_source": "github"
        }]
    },
    "sender": {
        "sender_list": ["wecom"],
        "query_days": 7,
        "delta_time": 3
    },
    "backup": {
        "backup_list": ["mongodb"],
        "query_days": 7,
        "delta_time": 3,
        "init_config": {},
        "after_get_content": [{
            "func": "str_replace",
            "before_str": "data-src=\"",
            "after_str": "src=\"https://images.weserv.nl/?url="
        }]
    },
    "schedule": {
        "period_list": [
            "00:10",
            "12:10",
            "21:10"
        ]
    }
}

注意上面的wechat_list字段,你只需要将自己想订阅的公众号输入进去即可,后面这块会做界面进行配置,先将就着用用吧。

启动

感谢你能看到这里,现在距离成功就只有一行命令了,请先检查liuli目录下文件树是否是下面这个样子:

(base) [liuli] tree -L 1
├── docker-compose.yaml
├── liuli_config
├────default.json
├── mongodb_data
└── pro.env

确认没问题后,执行:

docker-compose up -d

不出意外,会看到Docker启动了这三个容器:

21b34dd0204c90b6b4fa409853c340b8.png

查看liuli_schedule,会有日志如下:

输出日志如下:

Loading .env environment variables...
[2022:01:26 23:09:24] INFO  Liuli Schedule(v0.1.5) started successfully :)
[2022:01:26 23:09:24] INFO  Liuli Schedule time:
 00:10
 12:10
 21:10
[2022:01:26 23:09:36] INFO  Liuli playwright 匹配公众号 老胡的储物柜(howie_locker) 成功! 正在提取最新文章: 我的周刊(第023期)
[2022:01:26 23:09:39] INFO  Liuli 公众号文章持久化成功! 👉 老胡的储物柜
[2022:01:26 23:09:40] INFO  Liuli 🤗 微信公众号文章更新完毕(1/1)
...
[2022:01:26 23:09:45] INFO  Liuli 备份器执行完毕!

执行完毕后,你可以进入 MongoDB 数据库,会出现如下collection:

  • liuli_articles: 获取的文章元信息

  • liuli_backup: 文章全部备份

  • liuli_rss: 生成的 RSS

  • liuli_send_list: 分发状态

  • liuli_backup_list: 备份状态

假设你公众号源有老胡的储物柜,那么启动完毕,你可以访问老胡的储物柜的RSS订阅地址http://ip:8765/rss/liuli_wechat/老胡的储物柜/,效果如下:

bfb10e5179ac610eb47ee42945858982.png

注意红框部分,因为我使用的是GitHub备份器,所以地址显示的是GitHub地址,大家如果也想用这个,可以参考教程备份器配置[7],我使用GitHub备份器效果如下如:

eb6f5248cd73f71f54316a427d4c42c6.png每日更新的文章都会被Liuli自动同步到这个项目,如果大家都用Liuli的GitHub备份器,一起将备份结果结合起来的话,那将会是一股非常庞大的力量,可以期待下。

展示

Liuli启动成功后,对于使用者来说,主要感知在分发订阅这一层。

微信分发终端效果图:

211ed0193971613d9a48d5e7c1e60493.png

订阅效果如下图:

7ff56f8d9adba99d3a69f6f5a60e5e99.png

说明

本项目还属于非常稚嫩的早期阶段,如果大家觉得有用的话,希望快点用起来,趁早提点意见,让Liuli成长得更加迅速。

如果觉得这个项目不错,麻烦在GitHub给Liuli一个 Star,项目地址点这里 👉liuli-io/liuli[8]。

如果你在搭建&使用过程中有任何问题或者意见,你可以直接在GitHub提Issue或者直接进群我们详聊(如果过期,公众号里面有我微信,拉你进群):

af7ac904431baec88e2f2306fc45d58e.png

附录

docker-compose.yaml配置如下:

version: "3"
services:
  liuli_api:
    image: liuliio/api:v0.1.1
    restart: always
    container_name: liuli_api
    ports:
      - "8765:8765"
    volumes:
      - ./pro.env:/data/code/pro.env
    links:
      - liuli_mongodb
    depends_on:
      - liuli_mongodb
    networks:
      - liuli-network
  liuli_schedule:
    image: liuliio/schedule:v0.1.5
    restart: always
    container_name: liuli_schedule
    volumes:
      - ./pro.env:/data/code/pro.env
      - ./liuli_config:/data/code/liuli_config
    links:
      - liuli_mongodb
    depends_on:
      - liuli_mongodb
    networks:
      - liuli-network
  liuli_mongodb:
    image: mongo:3.6
    restart: always
    container_name: liuli_mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=liuli
      - MONGO_INITDB_ROOT_PASSWORD=liuli
    ports:
      - "27027:27017"
    volumes:
      - ./mongodb_data:/data/db
    command: mongod
    networks:
      - liuli-network

networks:
  liuli-network:
    driver: bridge

参考资料

[1]

v0.2.0任务看板: https://github.com/liuli-io/liuli/projects/1

[2]

打造一个干净且个性化的公众号阅读环境: https://www.howie6879.cn/post/2021/12_build_a_clean_env_for_reading/

[3]

安装: https://get.daocloud.io/

[4]

Liuli 环境变量: https://github.com/liuli-io/liuli/blob/main/docs/02.%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.md

[5]

全局配置: https://github.com/liuli-io/liuli/blob/main/docs/02.%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.md

[6]

企业微信: https://work.weixin.qq.com/

[7]

备份器配置: https://github.com/liuli-io/liuli/blob/main/docs/04.%E5%A4%87%E4%BB%BD%E5%99%A8%E9%85%8D%E7%BD%AE.md

[8]

liuli-io/liuli: https://github.com/liuli-io/liuli

Python爬虫教程:如何爬取多平台电商商品信息(价格、评价、库存) 本文介绍了如何编写一个跨平台电商商品爬虫,爬取多个平台的商品信息,包括商品名称、价格、评价等数据。通过Python的爬虫库(如requestsSelenium)和数据处理库(如pandasmatplotlib)的结合,我们可以高效地获取和分析电商平台上的商品信息。 阅读详情

相关推荐

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

你还在手动刷公众号吗?‌试试 RSS 订阅,‌让信息自动汇聚

微信公众号对于反爬的限制非常严格,之前有很多的方案,最后都是被封杀了。我这里列出一些我知道的、实践过的方案。

PeterJXL的博客 2万+

CentOS7环境下搭建 rsyslog 日志服务器,rsyslog+loganalyzer

1.系统环境部署 ip hostname 192.168.200.182 web 192.168.200.184 rsyslog-mysql 关闭防火墙、selinux、下载epel源 [root@web ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/f

sehn_的博客 3754

可能是目前最全的 RSS 源,微信公众号也有

RSS 作为一项“远古神技”。 知道它的人,无不扼腕叹息,曾经的互联网“宠儿”如今已经变成了“弃子”。 RSS 的两大难题之一:RSS 订阅源。 是无数人重新拥抱 RSS 的第一大障碍,如果你也曾经用过 RSS,那么本文将会帮你重新恢复对 RSS 的热爱。 预计能帮你解决 90% 的 RSS 订阅源问题。 而看到最后,你会发现奶酪这人行,能处!...

smilenimo的博客 3万+

QT-使用ECharts显示地图,还有更多惊艳的图表等待你的使用

QT-使用ECharts显示地图前言一、使用步骤1.下载示例2. QT使用HTML文件配置3.使用HTML文件4. 数据交互及自适应总结注意:这个地图是百度的在线地图,需要百度API密钥和在联网的状态下使用。离线使用图表 前言 我上文QT图表chart-饼状图,使用qt自带的图表库charts来显示图表,实现数据可视化,但是QT自带的图表库显示效果并不佳,通俗说,就是不好看。 然而,有这么一个开源图表库,图表种类极多,并且效果良好,能够实现具有很好的视觉冲击的数据可视化。 它就是Apache ECharts

博咯的博客 4896

【深度学习】通俗易懂讲解循环神经网络LSTM

目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。...

Nieson2012的专栏 2729

we-mp-rss | 微信公众号 RSS 订阅助手

微信公众号 RSS 订阅助手是一款高效的内容管理工具,可将公众号文章转为RSS订阅。它支持两种采集模式(Web/API)、全文输出、智能内容抓取,并提供用户友好的Web管理界面。工具支持钉钉/飞书通知、自定义更新频率、多种数据库存储等高级功能。通过合理设置采集深度和模式,用户可以优化阅读体验并保障系统稳定性。该工具显著提升了信息获取效率,适合个人和团队使用。

darkb1rd的博客 3482

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

WeWe RSS:为微信公众号生成RSS订阅源

WeWe RSS 能为微信公众号生成 RSS,实现更优雅的微信公众号订阅方式。

wbsu2004的博客 4万+

ChatTutor:让AI老师“会写会画”,打造可视化、互动式智能教育新范式

ChatTutor是一款突破性的开源AI教学助手,通过可视化电子白板实现"边讲边写"的沉浸式教学体验。该项目支持数学公式手写输入、动态函数绘图、自动生成思维导图等功能,采用多智能体架构实现专业协同。未来将扩展至编程、物理等STEM教育领域,适用于学生自学、教师备课和教育平台集成。作为MIT协议开源项目,ChatTutor通过赋予AI"教学肢体语言",推动教育从信息传递转向可视化互动建构,重新定义了AI助教的可能性。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 423

Arcgis加载在线地图(内涵各种在线地图)

这三个在线地图是最常用的在线地图,其他几个类型的在线地图请自行查看。,加载出在线图层说明连接成功,点击。1、首先打开Arcgis,找到。

爱吃雪糕的小布丁的博客 1万+

微信公众号 RSS 化:wewe-rss 十分钟上手指南

wewe-rss 是一个开源的微信公众号订阅工具,它通过微信读书接口抓取公众号文章,转换成标准的 RSS 订阅源,让你关注的公众号更新统一出现在 RSS 阅读器里。整个服务私有化部署,数据存在自己的服务器上。只要你会 Docker,十分钟就能跑起来。 [![微信公众号RSS管理界面](https://raw.gitcode.com/GitHub_Trending/we/wewe-rss/raw/

gitblog_01001的博客 1070

【史上最全面esp32教程】oled显示篇

esp32-arduino Oled屏幕的使用

m0_62599305的博客 1万+

Liuli在树莓派上的配置教程

本文介绍 Liuli 在树莓派上的配置部署教程Liuli[1]的目标是帮助你一站式构建多源、干净、个性化的阅读环境,目前还在缓慢开发迭代中,欢迎更多的朋友参与进来,其当前可应用的场景有:基于 Liuli 构建纯净的 RSS 公众号信息流基于 Liuli 追更&阅读小说建议使用前看一下上面的文章,有个大概印象,接下来将根据以下方式来介绍如何在树莓派上面安装Liuli...

howie6879's blog 544

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SeaTunnel next-release 版本发布说明:Bug 修复、功能增强与生态扩展全景解读

> 本指南以仓库根目录 [release-note.md](https://link.gitcode.com/i/e6f2db007f5badef714de745dd1c2d6c) 为骨架,系统梳理 SeaTunnel 即将发布版本(next-release)在 Core/Starter、Connector-V2、Zeta(ST-Engine)、Transformer、Formats、CI 与 E

gitblog_00844的博客 1011

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RSS订阅微信公众号初探-feed43

此处也对搜出多个公众号的情况进行了处理,"account_article_0"字段表示第一个公众号,"account_article_1"表示第二个,以此类推,因此若按微信号搜索,第一应当都是所要的公众号,只需保持该代码即可。本文所采用的feed43方法实际是通过搜狗微信来解决的,尽管操作简单方便,但局限性很明显,对有频繁推送的公众号是能力不足。最大的局限性在开头就说过,搜狗微信的来源仅能使用最新文章,很明显,这样的方法可能只适用于一天或者更长时间才发一次推送,且一次推送仅有一篇文章的情况。...

「 虚幻私塾」 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

微信公众号 RSS 生成完整上手:wewe-rss 十分钟私有化部署指南

你关注的公众号也许有几十个,真正愿意点开的不到五个。想用 RSS 阅读器把想看的内容集中起来,公众号却不提供订阅出口;想自己动手抓,又怕触发风控。wewe-rss 正是为这件事而生的开源工具:它借道微信读书接口,把任意公众号转成标准的 RSS / Atom / JSON 订阅源,支持私有化部署,从安装到拿到第一条 RSS 地址,十分钟内就能完成。 ## 三问速览:它是什么,解决什么,凭什么好用

gitblog_00393的博客 922

便捷管理公众号 RSS 工具:一键订阅感兴趣的内容

最近使用了一个很好用的查看公众号 RSS 的工具,可以轻松订阅和管理感兴趣的内容,再也不用手机满屏找文章了。用起来超级简单顺手,推荐给大家!工具网址:https://tools.1024tool.vip/index?inviteCode=m8I-TN4NR邀请好友,双方均可享受 15 天会员福利。以下是我精选的一些公众号内容,分享给各位,说不定对你也有帮助。成长与研习橘子汽水铺M小姐研习录42章经...

新亮笔记 1752

如何快速搭建微信公众号RSS订阅服务:wewe-rss完整部署指南

你是否厌倦了在微信中刷不完的公众号推送?关注了太多技术公众号却总是错过重要更新?wewe-rss为你提供了一套优雅的解决方案,让你能够将微信公众号内容转换为标准的RSS订阅源,实现信息的高效聚合与统一管理。这个基于微信读书接口的微信公众号RSS生成工具支持私有化部署,让你完全掌控自己的阅读体验。 ## 为什么选择wewe-rss?告别信息碎片化的终极方案 在信息过载的时代,微信公众号已成为我们

gitblog_00766的博客 507

如何用we-mp-rss打造个人微信公众号RSS中心?5分钟快速上手指南

we-mp-rss是一款基于官方接口的微信公众号订阅工具,能帮助用户高效订阅微信公众号,实时更新最新文章并生成RSS书签,轻松打造个人专属的微信公众号内容聚合中心。 ## 🌟 为什么选择we-mp-rss? we-mp-rss作为一款强大的微信公众号RSS生成工具,具备以下核心优势: - **高效订阅**:基于官方接口,稳定抓取微信公众号内容 - **实时更新**:自动定时同步最新文章,无需

gitblog_01051的博客 1620

搭建属于你自己的公众号订阅源:WeWeRSS搭建详细教程

不知道大家有没有这种感觉,微信里的公众号关注得越来越多,能点进去看的反而没几个。那些真正想追的更新,经常淹没在小红点和各种推送里,等想起来去找的时候,已经攒了十几篇没看。其实解决这个问题有个挺巧妙的思路——用 RSS 来订阅公众号。RSS 是个老古董技术了,但它的好处也很直接:所有更新按时间顺序排好,没有算法推荐,没有多余干扰,想看哪篇点哪篇。WeWeRSS 正是基于这个想法做出来的开源项目。它相当于一个中间人,通过微信读书的接口把你关注的公众号文章抓取出来,生成标准的 RSS 链接。

XingyeLuoyue的博客 2128

我用3分钟,把所有公众号文章都同步到了RSS

摘要:wechat2rss开源项目解决了微信公众号内容封闭管理的痛点,通过将公众号文章转为RSS订阅源。传统部署方式存在技术门槛高、维护复杂等问题,而借助Sealos云平台可实现一键部署,无需配置服务器和公网IP。用户只需获取公众号bizID并拼接订阅链接,即可在RSS阅读器中集中管理所有订阅内容,实现无干扰阅读和永久存档。该方案显著降低了技术使用门槛,让普通用户也能轻松构建个性化的信息获取渠道。(149字)

Sealos的博客 3444

公众号rss

公众号在手机上查看非常不方便,历史文章多的公众号查找更是头疼,基于这点整合了一个pc端查看公众号历史文章的站点,可以生成公众号rss地址,在订阅器内查看关注的公众号最新文章推送,相比市面上的其它公众号rss服务,或者历史文章集成站点,该站收录的公众号比较齐全,对于没有收录的公众号,直接进行提交基本在5分钟内直接自动收录,非常的方便,能够在pc上查看公众号的全部历史文章,翻页及其方便 1.首页 2.搜索 收录的账号比较多,而且明确了更新时间,更新也比较及时,文章数也有展示 3.公众号文章列表,

qq_23279427的博客 6243

微信公众号RSS订阅解决方案:wewe-rss私有化部署完全指南

在信息爆炸的时代,微信公众号已成为我们获取资讯的重要渠道。然而,面对数十个关注的公众号,如何在碎片化阅读中保持高效?如何避免错过重要更新?wewe-rss为您提供了一套完美的微信公众号RSS订阅解决方案,支持私有化部署,让您完全掌控自己的阅读数据。 ## 📊 信息过载的痛点与解决方案 **传统阅读方式的问题:** - 需要频繁切换不同公众号界面 - 容易错过重要内容更新 - 缺乏统一的阅读管

gitblog_00228的博客 1215

使用RSS地址订阅微信公众账号的文章~

[教程]使用RSS地址订阅微信公众账号的文章~ 微信越来越火,不少个人和团体都玩起了公众账号,每天分享一些有用的信息。但是受限于网络、查看公众账号信息体验不佳,尤其是图文并茂的长文本,远不如在计算机上看舒适。而且对于这种周期性的信息,我喜欢用RSS阅读器,比较方便且节省时间且不会忘记。 已经有童鞋将微信公众平台的信息抓取为网页,今天就用RSSHub来将这些网页转为RSS源。 ...

极客学长Bravo | 突破信息差 | 副业生财有术 3万+

WeWe RSS--更优雅的微信公众号订阅方式。

更优雅的微信公众号订阅方式。

好好学电脑 3181
上一篇: 我的周刊(第023期)
下一篇: 我的周刊(第024期)
老胡的储物柜
博客等级 码龄12年 1142粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值