手写一个抖音视频去水印工具,千万别刚一个程序员

Python代码对接抖音去水印提取API接口、TikTok去水印解析接口的源码 最近做了个小项目,主要是来备份自己在抖音里面发的一些作品到自己的电脑本地。因为这两年陆陆续续在抖音和tiktok里面已经发了不少作品了。最近又有消息说tiktok部分业务要被卖了。所以想把自己这两年陆续发的一些作品保存到自己的电脑里面,也保证到一份自己的云盘里面,但是这个在tiktok和抖音APP里面,下载保存视频是有水印的,但是我想保存那种我自己原先发的那种没有水印的,我给自己备份一下,这种自己的是没有水印的。然后最近也正在学习python门语言。正好在网上找到一个这种无水印解析视频的接口。这篇文章主要是 阅读详情

百因必有果

说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~

有天晚上她在抖音看见一个非常具有 教育意义 的视频,“男人疼媳妇就该承包全部家务活”,然后它就想把视频下载下来,分享到她的姐妹群交流 驭夫 心得。

可是大家都知道抖音下载的视频是带水印,作为一个重度强迫症选手这是不被允许的,没办法那就找找有没有去水印工具吧,找了一圈要不就是收费,要么下载不下来,主上脸上的笑容也在逐渐消失。

我在边上调侃了一句:也没多难,要不我给你做一个!“你行吗?” 然后投来了一个不屑的眼神。

敢说我不行?

哎呀!本来就开个玩笑,居然说我不行,这就不能忍了,我得证明给你看看!男人嘛,就受不了这话

“

(建议用谷歌浏览器),工具线上预览效果:http://47.93.6.5:8888/index

”
去水印使用预览

下边和大家一起分析下做这个去水印工具的思路,很多人乍一听 去水印 ,下意识的觉得是一种什么牛比的算法,其实这是一种假象~

刨根问底

虽说要争口气,可刚开始做的时候我也真是一脸懵逼,因为根本不知道该从哪入手,去水印什么原理啊?难不成我还要写个算法?

找了一个抖音视频的分享链接,一点点分析,不难发现这是个经过处理的短链接,那这个短链接一定会重定向到真实的视频地址 URL 。

https://v.douyin.com/JSkuhE4/

浏览器中输入短链接得到了下边这个 URL ,以我的经验判断URL中的 6820792802394262795 很有可能是视频的唯一ID,而唯一ID通常用来作为获取详情接口的入参,哎嘿~ 好像有点头绪了。

https://www.iesdouyin.com/share/video/6820792802394262795/
有水印的链接

赶紧祭出 F12 大法打开控制台,在众多请求中发现这么一个接口,它居然用到了上边的唯一ID。

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6820792802394262795

更惊喜的是接口返回的数据那叫一个详细,作者信息、音频地址、视频地址、平面图都有。但唯独没有无水印的视频 URL。只找到一个有水印的视频 URL,有点小失落,我又看了看这个地址,发现 wm 和我项目名有点像啊,不就是watermark 水印的缩写吗?

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

好像又看到了一丝希望,我赶紧修改URL在浏览器中又试了一下,果然真的没水印了。

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f030000bqk54kg2saj3lso3oh20&ratio=720p&line=0

到这才发现抖音去水印 简单的让人感动,哈哈哈~

身体力行

既然原理都清晰了,剩下的就是一步一步实现功能了,原理看着挺简单的,但实现中还是遇到一点点小坑,浪费了不少时间。

实现过程只有简单的三步:

  • 1、从输入框中过滤取出视频短连接

  • 2、短连接传到后端解析出无水印的视频 URL

  • 3、视频 URL传递给前端预览、下载

后端并没有什么难度,一步一步按照上边分析的流程解析真实视频 URL 就可以了。

“

注意 :我们想得到的地址URL,都是当前短连接URL 经过重定向后的URL。而抖音有些链接是不支持浏览器访问的,所以要手动修改 User-agent 属性模拟移动端访问才可以。

”
/**
* @param url
* @author xiaofu
* @description 获取当前链接重定向后的url
* @date 2020/9/15 12:43
*/
public static String getLocation(String url) {
        try {
            URL serverUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setInstanceFollowRedirects(false);
            conn.setRequestProperty("User-agent", "ua");//模拟手机连接
            conn.connect();
            String location = conn.getHeaderField("Location");
            return location;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

下边是完整的后端实现,可以看到代码量非常的少。

/**
 * @author xiaofu-公众号:程序员内点事
 * @description 抖音无水印视频下载
 * @date 2020/9/15 18:44
 */
@Slf4j
@Controller
public class DYController {
    public static String DOU_YIN_BASE_URL = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=";
    /**
     * @param url
     * @author xiaofu
     * @description 解析抖音无水印视频
     * @date 2020/9/15 12:43
     */
    @RequestMapping("/parseVideoUrl")
    @ResponseBody
    public String parseVideoUrl(@RequestBody String url) throws Exception {
        DYDto dyDto = new DYDto();
        try {
            url = URLDecoder.decode(url).replace("url=", "");
            /**
             * 1、短连接重定向后的 URL
             */
            String redirectUrl = CommonUtils.getLocation(url);

            /**
             * 2、拿到视频对应的 ItemId
             */
            String videoUrl = "";
            String musicUrl = "";
            String videoPic = "";
            String desc = "";
            if (!StringUtils.isEmpty(redirectUrl)) {
                /**
                 * 3、用 ItemId 拿视频的详细信息,包括无水印视频url
                 */
                String itemId = CommonUtils.matchNo(redirectUrl);
                StringBuilder sb = new StringBuilder();
                sb.append(DOU_YIN_BASE_URL).append(itemId);
                String videoResult = CommonUtils.httpGet(sb.toString());
                DYResult dyResult = JSON.parseObject(videoResult, DYResult.class);
                /**
                 * 4、无水印视频 url
                 */
                videoUrl = dyResult.getItem_list().get(0)
                        .getVideo().getPlay_addr().getUrl_list().get(0)
                        .replace("playwm", "play");
                String videoRedirectUrl = CommonUtils.getLocation(videoUrl);
                dyDto.setVideoUrl(videoRedirectUrl);
                /**
                 * 5、音频 url
                 */
                musicUrl = dyResult.getItem_list().get(0).getMusic().getPlay_url().getUri();
                dyDto.setMusicUrl(musicUrl);
                /**
                 * 6、封面
                 */
                videoPic = dyResult.getItem_list().get(0).getVideo().getDynamic_cover().getUrl_list().get(0);
                dyDto.setVideoPic(videoPic);
                /**
                 * 7、视频文案
                 */
                desc = dyResult.getItem_list().get(0).getDesc();
                dyDto.setDesc(desc);
            }
        } catch (Exception e) {
            log.error("去水印异常 {}", e);
        }
        return JSON.toJSONString(dyDto);
    }
}

前端实现也比较简单,拿到后端解析出来的视频URL 预览播放、下载就OK了。

在这里插入图片描述

为快速实现我用了老古董JQuery,我这个年纪的人对它感情还是很深厚的,UI 框架用的 layer.js。源码后边会分享给大家,就不全贴出来了。

$.ajax({
    url: '/parseVideoUrl',
    type: 'POST',
    data: {"url": link},
    success: function (data) {
        $('.qsy-submit').attr('disabled', false);
        try {
            var rows = JSON.parse(data);
            layer.close(index);
            layer.open({
                type: 1,
                title: false,
                closeBtn: 1,
                shadeClose: true,
                skin: 'yourclass',
                content: `<div style="overflow:hidden;height: 580px;width: 350px;"><div><div class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['videoUrl']}','${rows['desc']}')"><button class="layui-bg-red layui-btn-sm layui-btn">下载视频</button></a></div><div class="popButton"><textarea id="videourl" cols="1" rows="1" style="height:0;width:0;position: absolute;">${rows['videoUrl']}</textarea><button class="layui-btn-sm layui-bg-blue layui-btn" onclick="copy('videourl')">复制链接</button></div><div class="popButton"><a href="###" rel="noopener nofollow noreferrer" onclick="downloadVideo('${rows['musicUrl']}','${rows['desc']}')"><button class="layui-btn-sm layui-btn">下载音频</button></a></div><video id="video" width="360px" height="500px" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video></div></div>`
                //content: `<video id="video" src="${rows['videoUrl']}" controls = "true" poster="${rows['videoPic']}" preload="auto" webkit-playsinline="true" playsinline="true" x-webkit-airplay="allow" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portraint" style="object-fit:fill"><source src="${rows['videoUrl']}" type="video/mp4"> </video>`
            });

        } catch (error) {
            layer.alert('错误信息:' + error, {
                title: '异常',
                skin: 'layui-layer-lan',
                closeBtn: 0,
                anim: 4 //动画类型
            });
            return false;
        }
    },
    error: function (err) {
        console.log(err);
        layer.close(index);
        $('.qsy-submit').attr('disabled', false);
    },
    done: function () {
        layer.close(index);
    }
})
})
“

注意:我们在自己的网站中引用其它网站的资源URL,由于不在同一个域名下referrer 不同,通常会遇到三方网站的防盗链拦截,所以要想正常访问三方资源,必须要隐藏请求的referrer,页面中设置如下参数。

”
 <!-- 解决访问视频url 请求403异常 -->
 <meta name="referrer" content="no-referrer"/>

还简单做了下移动端适配,样式看着还可以,但是功能使用起来有点差强人意,后边在做优化了。

在这里插入图片描述

总结

很多东西就是这样,没认真研究之前总感觉深不可测,可一旦接触到技术的本质,又开始笑自己之前好蠢,懂与不懂有时就查那么一层窗户纸。

源码:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot-douyin-watermark


最后,推荐给大家一个干货有料的公众号:JavaCat,该号没有广告,天天都是干货,老Java带你做项目实践,永不迷路:

扫码关注,永不迷路

抖音无水印解析API 翻译一个JAVA版API解析 package com.demo; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMet... 阅读详情

相关推荐

本地开源AI去水印系统:原理、部署与实战调优

AI去水印本质上是面向多模态内容的视觉逆向生成任务,其核心在于从带水印图像中重建无干扰原始画面。技术原理涉及频域分析、条件生成建模与时序一致性约束,关键价值在于保障数据主权与处理可控性——尤其适用于隐私敏感、版权合规及批量生产的本地化场景。相比云端API或黑盒工具,本地开源方案支持硬件自适应、ROI精准修复与全流程可审计,真正实现‘数据不出设备’。本文聚焦PyTorch+OpenCV构建的轻量级端侧去水印系统,涵盖水印检测、掩膜生成、图像重建及视频时序融合等完整链路,适配RTX/M1/集成显卡等主流平台。

weixin_34176694的博客 440

github短视频去除水印项目Douyin_TikTok_Download_API介绍

github地址:目前该项目在github 已有5.1k star,如下是作者写的项目介绍:「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音|TikTok|Bilibili数据爬取工具,支持API调用,在线批量解析及下载。该项目是基于 PyWebIO,FastAPI,AIOHTTP,快速异步的抖音/TikTok/Bilibili数据爬取工具,并通过Web端实现在线批量解析以及下载无水印视频或图集,数据爬取API,iOS快捷指令无水印下载等功能。

修己xj的博客 8331

最新短视频去水印小程序源码修复版-前端后端内置接口+第三方接口

最新短视频去水印小程序源码,前端+后端,内置接口+第三方接口,修复数据库账号密码错误问题,内置接口支持替换第三方接口,看了一下文件挺全的,可以添加流量主代码,搭建需要准备一台服务器,备案域名,小程序开发工具,前端文件用HBuilder打开,后台文件上传服务器。 后台管理使用的事Thinkphp内核开发,使用内置接口将使用程序自带的解析接口,不过支持的平台很少,后面陆续更新。 使用第三方接口需要到后端代码中修改,其文件路径是 source/application/api/controller/Apis.php 文件

抖音快手短视频去水印API,接口开发文档

开发者官网:http://api.lingquan166.com/ 简介:根据抖音、微视、小红书、皮皮搞笑等APP中复制出来的链接,解析获取短视频的标题、封面、无水印短视频地址等信息。 接口地址: https://api.lingquan166.com/dsp?token=122917VU60151BJHTBI&key=46FDEDB583EKZI42D26392&url=视频链接(不支持中文) 1. 请求方式 GET请求(PHP可用CURL请求) 2. 返回数据 JSON 请...

Unknowncheats的博客 6301

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

用C++从零复刻Wordle:手把手教你实现命令行猜词游戏(含完整源码解析)

本文详细介绍了如何使用C++从零开始实现一个命令行版本的Wordle猜词游戏,包含完整的源码解析和核心模块设计。通过游戏逻辑控制器、单词库管理器等模块的构建,开发者可以学习C++实战技巧和性能优化方法,适合提升编程能力和游戏开发兴趣。

weixin_26763955的博客 336

手写一个抖音视频去水印Java工具,千万别刚一个程序员

关注公众号后台回复pay或mall获取实战项目资料+视频 百因必有果说一下我为什么要做个抖音视频去水印工具,其实是因为我的沙雕女友,她居然刚我~有天晚上她在抖音看见一个非常具有教育意义...

公众号-老炮说Java 4649

MAX30102心率血样模块在STM32F103芯片的程序说明

我希望你已经安装好了Keil MDK5这个软件,也安装了M3内核,可以编译一些STM32F103的一些项目下载程序后步骤: 1-按照下图找到IIC.uvprojx并打开(途中唯一绿色那个图标) 2-编译一次 3-确保0错误,0警告,下图所示 4-点击目标选项,然后找到STM32F103C8,再点debug–CMSIS****(我实际用的JTAG,用不了,选择这个CMSIS****即可)下图所示 5-下图所示,看看你的串口找到了没,找到了就点左下角的OK 6-按图上传到开发板 7-MAX30102接线方法

weixin_51357422的博客 5801

从零到跑通 dsh-purge:DeepSeek Harness 红队插件 3 种宿主一键安装与激活避坑实录

你在 Harness 里提了一个问题,模型没答。是它本来就不敢答,还是它在被看见你之前就被改写了?dsh-purge 是装在官方 DeepSeek Harness 上的红队评测插件,用来一键剥离宿主策略、按模型切换提示词,并内置一个受控演练台。这篇带你从零走到跑通,把三种宿主分别怎么装、装完怎么激活一次讲清楚。 ## 它到底在干什么 把你的问题从输入框送到模型手里,中间要穿过宿主的一整套工序:

gitblog_00679的博客 225

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 260

Vins-Fusion 外参camera-imu 标定

Vins-Fusion是一种基于优化的多传感器状态估计器,一大特色是支持实时camera-imu外参校准(相机和IMU之间的旋转)。Vins-Fusion 外参camera-imu校准是利用两帧间计算相机位姿和imu预积分得到位姿,构建最小二乘问题,并通过SVD求解camera-imu外参旋转矩阵。

u010196944的博客 2493

抖音视频批量下载终极指南:douyin-downloader 一套就够,无水印全类型保存

> 免责声明:本项目仅用于技术研究、学习交流与个人数据管理。请在合法合规的前提下使用,尊重版权和他人隐私。

gitblog_00558的博客 187

光学相干断层扫描(OCT)在 妇科诊断 中的革命性应用

尽管OCT在妇科的应用提供了许多潜在的优势,但它仍然是一个相对新的技术,并不是所有医疗机构都有能力提供这种类型的成像服务。随着技术的发展和医生对OCT的熟悉程度的提高,预计OCT将在妇科和其他医学领域中扮演越来越重要的角色。早期发现和准确的分类是提高治疗成功率的关键。虽然这是一个相对较新的应用领域,但OCT的非侵入性和高分辨率成像能力可能提供有价值的信息,以提高辅助生殖技术的成功率。:光学相干断层扫描(OCT)在阴道和外阴组织的评估中的应用正在逐渐展开,提供了一种新的方法来诊断和监测各种妇科疾病。

LiRongLu_的博客 1722

douyin-downloader 保姆级使用教程:从安装到批量下载抖音无水印视频,一篇带你跑通全流程

你有没有过这样的经历:刷到一条特别想收藏的抖音视频,打开录屏软件一顿操作,结果画质糊成马赛克,屏幕角落还挂着水印;或者你是个内容创作者,想把自己的作品全部备份到本地,却对着几百个链接束手无策。别急着放弃,今天要聊的 **douyin-downloader** 就是专门解决这两件事的——一个开源、免费、支持去水印高清下载的抖音批量下载工具。它不是那种"能用就行"的小脚本,而是把断点续传、自动去重、失

gitblog_00971的博客 210

linux 内核OOM问题定位-SLAB_DEBUG

首先看slabinfo按的size排序查看 slub object,可以查看 space 总占用大小,及objects个数判断泄漏点 为kmalloc-128。那个泄露多看/sys/kernel/debug的slab/kmalloc*-的alloc-traces和free-traces。SLAB或者SLUB有一个用就可以,改menuconfig没有clean会覆盖之前的更改,现在看一下编译的过程。或者配置defconfig,配置完之后需要clean后再编译。1,配置menuconfig。

陌上花开缓缓归以的博客 900

水文仿真软件:SWMM (Storm Water Management Model)_(6).地理信息系统(GIS)与SWMM数据交换

地理信息系统(GIS)与SWMM数据交换是水文仿真中的一个重要环节。通过合理的数据准备、导入、导出和校验,可以确保模型的准确性和实用性。本文介绍了使用SWMM GIS Add-on和Python脚本进行数据交换的方法,并提供了一些优化建议和常见问题的解决方案。希望这些内容能帮助读者更好地进行GIS与SWMM的数据交换,提高水文仿真的效率和质量。

kkchenjj的博客 579

多个视频如何合成一个视频?推荐7个方法,从专业软件到免费工具!

嘿,朋友们!我前两天拍了好几段旅游视频,想拼成一个完整的Vlog,结果电脑里一堆格式不一样的素材,搞得我头都大了。你是不是也遇到过这种情况?想转个场、加个背景音乐,但光想着如何把多个视频合成一个视频就懵了——别急,今天我就把我试过的所有方法全翻出来,从专业软件到免费工具,一个个给你说清楚。先说最让我惊喜的那个吧,效率高得离谱,就是汇帮视频格式转换器下的视频合并功能。

weixin_43864561的博客 242

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

8年只做一件事!

那就是写代码,不停的写代码,八年来风雨无阻,人不能决定出身,但一定可以改变命运! 我是小富,目前是京东架构师,负责电商平台的架构设计,工作8年来从事了支付、医美、电商、跨境电商等诸多行业。 小富是个比较能折腾的人,对赚钱比较敏感,创业、接私活、组建团队、写文章,反正能赚到钱的他都会尝试一下,做了很多工作之外的努力,虽然没有暴富但着实让生活滋润了不少。如果对这方面有兴趣,可以向这家伙请教下。 他做了一个公众号【程序员内点事】,主要分享他在实际开发中遇到问题的解决方案,回答粉丝提的一些问题。 比如:面试经验、

程序员内点事 749

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

每次面试的时候我都拿出来看一下,工资基本都涨5000以上

好家伙我要开始不害臊了 推一下自己的公众号:程序员内点事 这个号的绝大部分文章是自己在学习技术的过程中,实践总结的案例分享,像是redis、zookeeper、springboot 、flowable、分库分表Sharding-JDBC、RabbitMQ、seata、MySQL等等主流的一些框架,学技术做好的方式就是要理论加实战,这样理解的会更透彻 以下是我做这个号以来写的一些文章,我分了一下类,希望对你会有些帮助 Springboot 开发技巧 3种 Springboot 全局时间格式化方式,别再写重复

程序员内点事 655

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

GPT-4参数真相:1.8万亿与2%激活的工程本质解析

混合专家(MoE)是大模型突破算力瓶颈的核心架构范式,其原理在于通过动态路由实现条件计算,使模型在保持超大规模参数总量的同时,仅对每个token激活少量专家子网。这种稀疏化并非简单‘开关’,而是涉及路由决策、显存调度、负载均衡与容错协同的系统工程。技术价值体现在显著降低推理延迟、提升GPU利用率、支持细粒度成本计量,并推动AI芯片向稀疏计算效率演进。典型应用场景包括高并发API服务、垂直领域轻量化部署及可编程专家引导。本文深入剖析GPT-4所引发的‘1.8万亿参数’与‘2%激活率’两大热词背后的工程实质,揭

dglf54292的博客 423

最新版抖音(20200624)去水印原理及源码,简单的原理与面临的挑战

1.打开抖音链接,获取下图的这个item_id 2.之后使用这个接口请求就ok了 https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6832178122364816644 3.把 playwm 改成 play 更多技术学习破解可以关注csdn和微信公众号同号 “java微技术” ...

Rs的博客 6508

嘘!市面上短视频(douyin)“去水印”的工具原来是这样实现的

2.嗯,在浏览器打开这个链接然后打开刚才复制过来的地址,https://v.douyin.com/e1MMESR/。3. 打开地址发现有302跳转4.然后播放左侧的视频,竟然变成了带水印的视频。我们在app里播放的看不到水印的,但是在浏览器打开就是有水印的。5.在控制台发现有ajax请求,返回了该视频的全部信息,当然也包括视频地址6.找到视频播放地址video.play_addr.url_list[0]上面这个地址和我们在控制台审查元素看到的video播放的是一个地址,但是都是带水印的地址。

2401_84619606的博客 3万+

最新稳定抖音、快手、小红书去水印接口php源码分享

echo json_encode(array("code"=>"404","msg"=>"参数错误"));以上代码比较完整,可以单独使用也可以放到任何源码里面使用,最近做去水印小程序用的的解析接口源码分享给大家。// api接口替换成你自己申请的接口。

q95267700的博客 2849
上一篇: 你还在new对象吗?Java8通用Builder了解一下?
下一篇: MQ消息中间件,面试能问写什么?
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值