最新selenium+验证码识别模拟登陆b站

python + selenium 模拟登陆b站 文章目录截取验证码图片识别缺口模拟滑动爬坑代码相关优化参考资料 截取验证码图片 首先将鼠标移至小块处,会出现滑动后的图片(即原图) 利用selenium找到验证码图片所在元素 这样,我们就可以截取整个网页,再利用图片元素返回的位置和宽高,裁切出验证码图片并保存 点击小块并按住不放,出现带缺口的图片 通过同样的方法,可以利用selenium裁剪出带缺口的验证码 识别缺口 具体想法,比较两张图片... 阅读详情

作者刚学python爬虫的菜鸟一枚,内容如有不足,敬请指出。

在这里插入图片描述

主要步骤:

1.分析登录界面结构

在这里插入图片描述
首先明确我们的目标,打开登陆界面,定位用户名和密码对应的标签,输入相关数据后,点击登录,此时页面会弹出验证码。
在这里插入图片描述
下面用两种方法进行验证码的获取,然后提交给超级鹰进行识别,接收到汉字的坐标后,处理数据,然后用动作链进行点击操作,最后定位点击确认,登陆成功。

2.使用selenium打开登录页面

代码实现:

# 使用selenium打开登录界面
bro = webdriver.Chrome(executable_path='./chromedriver')
bro.get('https://passport.bilibili.com/login')

# 定位用户名,密码输入框
username = bro.find_element_by_id('login-username')
password = bro.find_element_by_id('login-passwd')

sleep(1)
# 将自己的用户名密码替换xxxxxx
username.send_keys('xxxxxx')
sleep(1)
password.send_keys('xxxxxx')
sleep(1)

# 定位登录按钮并点击
bro.find_element_by_xpath('//*[@id="geetest-wrap"]/div/div[5]/a[1]').click()
sleep(2)

3.获取页面当前验证码图片

3.1方法一、页面截图,将验证码区域进行裁剪保存

使用此方法时,注意我们截取验证码图片时需要截取完整,完整验证码截图如下
在这里插入图片描述
首先做的当然是将点击登录后的页面进行截图,然后定位到验证码的位置,通过location()方法获取验证码左上角的坐标, size() 获取验证码的宽和高,左上角坐标加上宽和高就是验证码右下角的坐标。获取坐标后就可以用crop()方法来进行裁剪,然后将裁剪到的验证码图片保存。

此时虽然获取了验证码图片,但是还不能直接提交给超级鹰。。
因为超级鹰识别的验证码图片的宽和高有限制,最好不超过460px,310px。
但是截取到的验证码图片宽高为338px,432px,这时就要先将图片缩小一倍再提交即可,等到收到坐标数据再将坐标乘2。

代码实现:

# save_screenshot就是将当前页面进行截图且保存
bro.save_screenshot('page.png')

# 定位验证码图片的位置
code_img_ele = bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div')
location = code_img_ele.location  # 验证码左上角的坐标x,y
size = code_img_ele.size  # 验证码图片对应的长和宽

# 左上角和右下角的坐标
# 这里坐标乘1.25是由于电脑屏幕的比例不是100%,我的是125%,请自行在设置中查看
rangle = (
    int(location['x'] * 1.25), int(location['y'] * 1.25), int((location['x'] + size['width']) * 1.25),
    int((location['y'] + size['height']) * 1.25)
)

i = Image.open('./page.png')
code_img_name = './code.png'
# crop根据rangle元组内的坐标进行裁剪
frame = i.crop(rangle)
frame.save(code_img_name)

# 缩小图片,宽为169,高为216
code = Image.open('./code.png')
small_img = code.resize((169, 216))
small_img.save('./small_img.png')
print(code.size, small_img.size)

3.2方法二、通过网页获取图片地址,并保存

这种方法比上一种更加方便,分析网页源码获取图片地址,对该地址发送请求,接收返回的二进制文件,进行保存。首先打开网页源码找到图片地址。
在这里插入图片描述
图片地址是img标签的src属性值,通过xpath得到地址,直接对此url发送请求,接收数据并保存即可。
注意:由于获取的图片的高度仍然大于超级鹰标准格式,所以也需要将图片缩小。

代码实现:

# 获取img标签的src属性值
img_url = bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div/div[2]/div[1]/div/div[2]/img').get_attribute('src')
headers = {
    'Users-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
}
# 获取图片二进制数据
img_data = requests.get(url=img_url, headers=headers).content
with open('./node1.png', 'wb')as fp:
    fp.write(img_data)
i = Image.open('./node1.png')
# 将图片缩小并保存,设置宽为172,高为192
small_img = i.resize((172, 192))
small_img.save('./small_img1.png')

4.使用超级鹰识别验证码

这部分没什么说的,直接调用就行。

代码如下:

# 将验证码提交给超级鹰进行识别
chaojiying = Chaojiying_Client('用户名', '密码', '96001')  # 用户中心>>软件ID 生成一个替换 96001
im = open('small_img.png', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
# 9004是验证码类型
print(chaojiying.PostPic(im, 9004)['pic_str'])
result = chaojiying.PostPic(im, 9004)['pic_str']

5.对获取的坐标数据进行提取,并用动作链完成点击

超级鹰识别返回的数据格式是:123,12 | 234,21。我们可以将数据以’ | '进行分割,保存到列表中,再以逗号分割将x,y的坐标保存,得到[ [123,12],[234,21] ]这一格式,然后遍历这一列表,使用动作链对每一个列表元素对应的x,y指定的位置进行点击操作,最后定位并点击确认,登录成功。

代码实现:

all_list = []  # 要存储即将被点击的点的坐标  [[x1,y1],[x2,y2]]
if '|' in result:
    list_1 = result.split('|')
    count_1 = len(list_1)
    for i in range(count_1):
        xy_list = []
        x = int(list_1[i].split(',')[0])
        y = int(list_1[i].split(',')[1])
        xy_list.append(x)
        xy_list.append(y)
        all_list.append(xy_list)
else:
    x = int(result.split(',')[0])
    y = int(result.split(',')[1])
    xy_list = []
    xy_list.append(x)
    xy_list.append(y)
    all_list.append(xy_list)

# 遍历列表,使用动作链对每一个列表元素对应的x,y指定的位置进行点击操作
# x,y坐标乘2和0.8,是由于
for l in all_list:
    x = l[0] * 2 * 0.8
    y = l[1] * 2 * 0.8
    # 将点击操作的参照物移动到指定的模块,
    # 若用方法二获取的验证码图片,要添加下面代码对code_img_ele赋值
    # code_img_ele = bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div/div[2]/div[1]/div/div[2]/img')
    ActionChains(bro).move_to_element_with_offset(code_img_ele, x, y).click().perform()
    sleep(0.1)
    print('点击已完成')

# 完成动作链点击操作后,定位确认按钮并点击
bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div/div[3]/a').click()

完整代码

import requests
from hashlib import md5

class Chaojiying_Client(object):

    def __init__(self, username, password, soft_id):
        self.username = username
        password = password.encode('utf8')

        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,
                          headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()


# 以上为超级鹰文档代码

from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ActionChains
import random

# 使用selenium打开登录界面
bro = webdriver.Chrome(executable_path='./chromedriver')


def login():
    bro.get('https://passport.bilibili.com/login')

    # 定位用户名,密码输入框
    username = bro.find_element_by_id('login-username')
    password = bro.find_element_by_id('login-passwd')
    username.send_keys('xxxxx')
    password.send_keys('xxxxx')

    # 定位登录按钮并点击
    bro.find_element_by_xpath('//*[@id="geetest-wrap"]/div/div[5]/a[1]').click()
    sleep(random.random()*3)

def save_img():
    # save_screenshot就是将当前页面进行截图且保
    bro.save_screenshot('page.png')
    # 定位验证码图片的位置
    code_img_ele = bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div')
    location = code_img_ele.location  # 验证码左上角的坐标x,y
    size = code_img_ele.size  # 验证码图片对应的长和宽

    # 左上角和右下角的坐标
    rangle = (
        int(location['x'] * 1.25), int(location['y'] * 1.25), int((location['x'] + size['width']) * 1.25),
        int((location['y'] + size['height']) * 1.25)
    )

    i = Image.open('./page.png')
    code_img_name = './code.png'
    # crop根据rangle元组内的坐标进行裁剪
    frame = i.crop(rangle)
    frame.save(code_img_name)
    return code_img_ele

def narrow_img():
    # 缩小图片
    code = Image.open('./code.png')
    small_img = code.resize((169, 216))
    small_img.save('./small_img.png')
    print(code.size, small_img.size)

def submit_img():
    # 将验证码提交给超级鹰进行识别
    chaojiying = Chaojiying_Client('1837751407', '123456', '908533')  # 用户中心>>软件ID 生成一个替换 96001
    im = open('small_img.png', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    print(chaojiying.PostPic(im, 9004)['pic_str'])
    result = chaojiying.PostPic(im, 9004)['pic_str']
    return result

def parse_data(result):
    all_list = []  # 存储即将被点击的点的坐标  [[x1,y1],[x2,y2]]
    if '|' in result:
        list_1 = result.split('|')
        count_1 = len(list_1)
        for i in range(count_1):
            xy_list = []
            x = int(list_1[i].split(',')[0])
            y = int(list_1[i].split(',')[1])
            xy_list.append(x)
            xy_list.append(y)
            all_list.append(xy_list)
    else:
        print(result.split(',')[0])
        print(result.split(',')[1])

        x = int(result.split(',')[0])
        y = int(result.split(',')[1])
        xy_list = []
        xy_list.append(x)
        xy_list.append(y)
        all_list.append(xy_list)
    return all_list

def click_codeImg(all_list, code_img_ele):
    # 遍历列表,使用动作链对每一个列表元素对应的x,y指定的位置进行点击操作
    for l in all_list:
        x = l[0] * 1.6
        y = l[1] * 1.6
        # move_to_element_with_offset移动到距某个元素(左上角坐标)多少距离的位置
        ActionChains(bro).move_to_element_with_offset(code_img_ele, x, y).click().perform()
        sleep(random.random())
        print('点击已完成')

    sleep(random.random()*2)
    # 完成动作链点击操作后,定位确认按钮并点击
    bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[6]/div/div/div[3]/a').click()

def main():
    # 进入登录界面,输入账号密码
    login()
    # 保存页面截图,并根据坐标裁剪获取验证码图片
    code_img_ele = save_img()
    # 缩小图片
    narrow_img()
    # 将图片提交给超级鹰,获取返回值
    result = submit_img()
    # 解析返回值,将数据格式化
    all_list = parse_data(result)
    # 在页面验证码上完成点击操作
    click_codeImg(all_list, code_img_ele)

if __name__=='__main__':
    main()

知识参考链接

Python实现点选验证码识别, B站模拟登陆 Python实现点选验证码识别,小破站模拟登录 阅读详情

相关推荐

越过验证码 selenium模拟登录B站项目实战(附源码)

实战:selenium模拟登录B站 登录验证码处理 selenium 中的难点验证码破解因为确实没有很好的方式,一般都需要通过第三方平台实现破解,本案例中使用的是超级鹰平台(收费,大概1元30次,测试用冲个1元就足够)。下面实战开始! 分析登录界面结构 B站登录界面如下。 首先明确我们的目标,打开登陆界面,定位用户名和密码对应的标签,输入相关数据后,点击登录,此时页面会弹出文字验证码。 下文会用两种方法进行验证码图片的获取,并提交给超级鹰进行识别,接收到汉字的坐标后,处理坐标数据

与君初相识,犹如故人归 5384

selenium登录B站,实现验证码识别登录

利用selenium和超级鹰实现b站验证码识别并登录

weixin_45938063的博客 1100

Python实现点选验证码识别, 模拟登陆小破站并自动发弹幕

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python56123的博客 1618

基于Selenium+OCR,校验验证码,实现对于京东店铺DSR页面的自动访问(仅做为技术研究测试)

淘系店铺的DSR数据可以通过数据爬虫的形式,自动进行定期采集店铺以及竞品DSR数据,但是对于京东的DSR数据,由于京东在查看DSR数据的时候,增加了图形验证码,导致一般的爬虫,很难进行数据采集。

weixin_40704848的博客 484

Python爬虫实战 | (15) 破解bilibili登陆滑动验证码

在本篇博客中,我们将使用selenium模拟登录bilibili网站,破解其登陆时的滑动验证码。 首先回顾一下,滑动验证码相关知识: 简介 滑动图形验证码,主要由两个图片组成:抠块和带有抠块阴影的原图。 这里有两个重要特性保证被暴力破解的难度: (1)抠块的形状随机 (2)抠块所在原图的位置随机 生成滑动验证码 1)后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标...

sdu_hao的博客 7003

越过验证码!selenium模拟登录B站项目实战(附源码)

selenium 中的难点验证码破解因为确实没有很好的方式,一般都需要通过第三方平台实现破解,本案例中使用的是超级鹰平台(收费,大概1元30次,测试用冲个1元就足够)。下面实战开始!

Androidyuexia的博客 1392

最新selenium+验证码识别模拟登陆B站

↑↑↑关注后"星标"简说Python 人人都可以简单入门Python、爬虫、数据分析 简说Python发布作者:丁毅 湖师18级软件工程专业学生编辑:简说Python ...

简说Python的博客 969

python+selenium +Firefox 实现bilibili(B站)自动登陆

2020年12月刚写的脚本,bilibili未对webdriver进行检测,直接用selenium+打码平台实现自动登录。脚本中修改用户名密码即可直接运行。PS:运行环境请自行装好

Selenium获取动态图片验证码

关于图片验证码的文章,我想大家都有一定的了解了。   在我们做UI自动化的时候,经常会遇到图片验证码的问题。   当开发不给咱们提供万能验证码,或者测试第三方网站比如知乎的时候,我们就需要自己去识别验证码。   OCR   OCR是一种图像文字识别的技术,例如图中的验证码,我们用肉眼识别就是c5s3,但机器可不比咱们肉眼。所以我们要利用ocr技术,让我们的Python脚本自动通过图片识别出对应的文字。   常见的识别类库   在Python中其实有许多识别类库,这里只介绍博主自己实践过的成功

m0_67419887的博客 1万+

用VSCode远程开发Jetson小车:告别Jupyter,在本地IDE高效调试Rosmaster Python程序

本文详细介绍了如何利用VSCode的Remote-SSH扩展在本地IDE中高效开发Jetson小车的Rosmaster Python程序。通过配置远程开发环境、调试技巧和项目管理方法,开发者可以告别Jupyter Notebook的碎片化编码,实现完整的机器人控制程序开发,显著提升工作效率。

weixin_30652491的博客 475

MatGPT:在MATLAB中集成AI助手,实现代码生成与调试自动化

大语言模型(LLM)通过API接口为开发者提供了强大的自然语言理解和代码生成能力,其核心原理是基于海量数据训练的Transformer架构,能够根据上下文预测并生成连贯的文本或代码。这一技术为工程实践带来了革命性价值,特别是在科学计算和算法开发领域,能够显著提升开发效率,实现智能化的代码辅助和问题解答。在实际应用中,开发者常需在IDE与AI工具间频繁切换,导致工作流中断。MatGPT作为一个开源项目,通过深度集成ChatGPT API到MATLAB环境,有效解决了这一痛点。它支持多模态输入、预设提示词管理和

weixin_42388898的博客 499

Python——超级鹰打码平台实现selenium对b站的自动化登陆

超详细,python+selenium+超级鹰打码平台实现b站的自动化登录。

qq_57410822的博客 3749

S4 codingblock增加客户化字段的一些小问题

今天使用codingblock增加了两个客户化字段后(S4版本),查看常用的几个表 ACDOCA BSEG 等等两个客户化字段安静的出现在表内,以为没有问题了 。结果后来MM那边查看物料凭证时程序直接dump,后来开发查明原因居然是因为财务增加的这两个增强字段的原因。 报错如下图所示: 主要是因为增加了字段后,更新了后台表,但是没有自动更新到视图。就是MSEG表增加了这两个字段,但是呢他对应的视图NSDM_V_MSEG没有增加,导致两边的结构不一致。 所以要解决这个问题,只能在视图NSDM_V_MSEG增

m0_46145967的博客 3918

最新验证码识别模拟登陆B站

「本文目录」 1 分析登录界面结构2 使用selenium打开登录页面3 获取页面当前验证码图片4 使用超级鹰识别验证码5 对获取的坐标数据进行提取,并用动作链完成点击1 分析登录界面...

Python中文社区 1197

U8备份提示“远程组件初始化失败”

问题现象: SQL出现问题后重装,U8没有重装,之后直接附加数据库,U8可以正常登陆,但是在备份的时候提示远程组件初始化失败。 问题原因: 因为重装了SQL,没有进行U8数据源初始化,导致Master库中丢失了存储过程储 解决办法:在Master库重建存储过程 USE [master] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[U8FileServerExtendProc] @cmdLi.

SamYux 2472

NAT反向代理技术的实现(外网访问内网)

NAT反向代理技术的实现(外网访问内网)(版权所有,引用 请联系作者,注明出处) NAT技术是网络中的重要应用之一。当有一个场景:内网搭建了服务器,需要外网访问时,可以借助NAT映射来实现。如:单位建立了一个Web服务器,我们希望在员工回家之后,依然可以访问到它,那怎么实现呢? 下面的拓扑图,就用来示范这个应用反面场景的实现过程。 一、题目要求: 地址配置如图。使用静态路由: 1、配置右侧交换机2950T,实现单臂路由; 2、配置路由使网络连通; 3、配置NAT访问,实现外网对风网服务器的

joyousmime的博客 8487

Python3爬虫实战【点触验证码】 — 模拟登陆bilibili

Python3爬虫实战【点触验证码】 — 模拟登陆bilibili 爬虫时间:2020-08-30 请求链接:https://passport.bilibili.com/login 实现目标:模拟登陆哔哩哔哩 涉及知识:点触验证码的攻克、自动化测试工具 Selenium 的使用,超级鹰打码平台的使用 完整代码:https://github.com/dateolive/python-/tree/master/bilibili 学习过程中的爬虫GitHub库:https://github.com/dateol

梦独吟 5087

SAP S4 HANA:按单生产(MTO)场景中的COGS分割

本文介绍了SAP S/4HANA中提供的各种选项,以在销售订单/商品是按订单生产(以下称为MTO)生产流程中的成本对象时,在基于帐户的COPA环境中报告COGS分割信息。

adam915的博客 1191

巧用 selenium 解决验证码,模拟登陆某网站

来源:Python数据之道作者:叶庭云整理:Lemon一、前言1. 介绍验证码多种多样,有图形文字的、有模拟点选的、有拖动滑动的,但其实归根结底都需要人来对某种情形做一些判断,然后把结果...

SeizeeveryDay的博客 2957

桌面实施远程光电体积描记法:使用面部视频测量心率的C++详细指南

在现代医疗和健康监测领域,心率是一个非常重要的生理参数,它可以为我们提供关于身体健康状况的重要信息。但是,随着技术的进步,现在我们有了一种新的方法,称为远程光电体积描记法(rPPG),它可以无需与皮肤接触就测量心率。然后,我们从面部颜色的信号序列中提取绿色通道的值,因为绿色通道对于心率的变化最为敏感。在上述代码中,我们使用了OpenCV库,它是一个开源的计算机视觉库,非常适合这种应用。这种变化是由于血液流动引起的,当心脏跳动时,血液流经面部,导致肤色的轻微变化。要实现rPPG,首先需要检测并跟踪人脸。

qq_38334677的博客 608

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1326

使用selenium自动登陆b站 图片文字验证识别

文章目录前言一. 反,反反爬虫1.反爬虫2.反反爬虫二,超级鹰三.完整代码导包超级鹰接口连接手动开启的浏览器定位文本框标签图片文字识别文本处理,坐标处理导入刚刚py文件中的函数按文字顺序点击图片中的坐标总结 前言 python使用selenium自动化 实现图片文字识别 登陆b站: 一. 反,反反爬虫 1.反爬虫 一般来说使用 Selenium 调用 Chromedriver 来打开网页,还是与正常打开网页有一定的区别的。现在很多网站都加上了对 Selenium 的检测,来防止一些爬虫的恶意爬取。 大多数

weixin_45059947的博客 2933

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

selenium破解B站极验验证码

selenium破解B站最新版极验验证码

小月牙 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 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")

【Python项目】Python实现点选验证码识别, 模拟B站登陆 | 附源码 学习资料

今天的分享到这里就结束了顺便给大家推荐一些Python视频教程,希望对大家有所帮助:Python零基础入门到精通视频合集【整整800集】Python爬虫项目零基础入门合集,细狗都学会了,你还不会?对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦。

Gtieguo的博客 5692

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

巧用 selenium 解决验证码,模拟登陆某流行网站

来源:Python数据之道作者:叶庭云整理:Lemon巧用 selenium 解决验证码,模拟登陆某流行网站一、前言1. 介绍验证码多种多样,有图形文字的、有模拟点选的、有拖动滑动的,但...

Python数据之道 1928
上一篇: 简单爬虫:爬取100张4K动漫图片
下一篇: 解决Pycharm中导入docx模块中Document函数报错问题
Dream丶Killer
Dream丶Killer 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄8年 7万+粉丝 187原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream丶Killer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值