Posts

Showing posts from July, 2020

AI概论 第二周笔记 - Building AI Projects

前言 续上一个星期的内容, 禁止转载 。 Week 2 Introduction 在这一篇文章中,会介绍启动一个AI项目需要做什么,AI的流程是什么,怎么去选择一个AI项目,如何组织数据和建立团队,无论对你自己或是和朋友一起,亦或是企业里更大规模的队伍,都是重要的。 Workflow of a machine learning project 机器学习可以学习从输入到输出,或 A-->B 的过程。 第一步是收集数据:现在那语音助手举个例子,比如苹果的siri,你得到处走然后让人们来说这个词'siri' ,然后你把这些语音记录下来,同时也需要收集其他的词 例如'你好'等很多其他的词,并且录音下来。当你收集了非常多音频数据 也就是收集了很多不同人说 'siri' 或其他词语的语音后就可以开始训练数据了。 第二步就是训练模型,就是说你需要利用一个机器学习算法 来学习从输入到输出,或者是A到B的映射,这里输入A就是一段上面收集的语音。这个时候团队会尝试第一次建立模型和训练,如果一次尝试的效果不好就需要尝试很多次。(在人工智能领域,叫做反复迭代。)直到模型看起来足够好为止。 第三步就是把训练好的模型发放给任何人用,让任何人去评估这个训练好的模型。如果有人觉得不好用,或者有人说siri之后 NN 没反应,这个时候就要维护和更新下 NN (比如英式口音和美式口音)。 Workflow of a data science project 和机器学习项目不同,可以从数据科学那里得到改进的行动和观点。这些观点可能会让你的采取不同的行动,所以数据科学项目与机器学习的工作流程不同。 如果你在运营一个卖咖啡杯的电子商务平台 或者是在线购物网站,所以当一个用户从你这购买咖啡杯时,他们常常需要经过一系列步骤。 首先,他们将访问你的网站,浏览不同的马克杯,然后他们点进某个产品的详情页面,他们把商品放入购物车,进入支付界面,最终他们将支付订单。在这个过程中可以通过用户点击记录一份日志。 第2步是分析数据,你的数据团队可能会想出很多会影响销售因素,例如,数据团队也许 会认为海外顾客因为国际运费太高而被吓退,这可以解释为什么很多人虽然 点进了支付页面,但是最终没有下单。如果真是这样,那么你可能会考虑是否把部分运

AI概论 第一周笔记 - What is AI ?

Image
前言 年纪轻轻的,学 AI 不怕掉头发吗?以下是本喵整理的笔记, 禁止转载 。 另外个人觉得现阶段 AI 和 NN 没有什么区别,所以下面的 AI 和 NN 是互相对等的。 Week 1 Introduction 总结来讲,AI 实际上是两个独立的概念: 弱人工智能 :几乎所有我们可以看到的人工智能中的进展都是弱人工智能,这些的AI只会做一件事情,比如智能音箱或者自动驾驶等。这类的AI只有单方面的成果。 强人工智能 :他们可以做人类可以做的事情,甚至可能能够做人类都不能够做的事情。 不过现阶段来说弱人工智能在进步,几乎没有强人工智能的方面。两个方面都有价值,但很不幸的是由于弱人工智能的快速发展,导致人们认为整体的人工智能有很大的进步,但也会导致一些非理性的恐惧,让人以为 AI 会取代人类。 现阶段强人工智能的确是一个很厉害的目标,但还要更多的科研,他需要多方面的技术才可以实现,这意味着未来十几年或者几百年甚至几千年的探索才可以突破。正因为强人工智能离我们太远,所以也没有必要太过于担心这件事。 Machine Learning 最常用的机器学习模型实际上就是学习 A --> B 的过程,这个叫监督学习。 为什么AI现在才开始崛起呢?其实原因很简单,以前的计算机有很大的限制,比如硬盘太小等等,随着时间变化,计算机和网络大量的普及,时间越久收集到的数据就越多。AI则是使用这些数据来训练,数据越多AI就越准。当 NN 越大的时候,结果就越精准,但需要的数据也就越多,这就是为什么经常听到 大数据 。 What is data? 到底什么是数据?简单来说就是放进去NN的那堆数据。 数据从哪来? 手动标记:假设你拿到了一堆猫猫狗狗的图片,你想要让 NN 区分猫猫狗狗,你就可以对这些图片进行描述,然后喂入 NN 。 从采集器那边获取:比如做一个 APP 当用户点 Yes or No 的时候采集器就可以开始收集数据啦。 下载开源的数据:比如  TensorFlow 自带的模块 有很多开源的数据。 另外,一些软件团队会经常错误的收集错误,这个时候就要和 AI团队 去沟通,要使用AI做什么,有没有价值等等,但也不要错误的认为把数据交给 AI团队 就一定挖掘到价值。 其次是数据是非常乱的,如果你提供的数据质量

TensorFlow 官方自然语言处理系列 笔记

Image
前言 个人整理的笔记,如有错误可以评论区更正下喵,毕竟本喵正在学习,强烈建议在看这篇文章之前先去看看官方视频。 视频 TensorFlow 官方自然语言处理系列视频  (英文字幕,约40分钟) Natural Language Processing - Tokenization (NLP Zero to Hero - Part 1) 有些人使用每一个单词里面的字母换成 ASCII 码然后扔进去 NN 处理,但是对于 NN 来说,得到了一堆只是相同的但顺序不同的 ASCII 码,这样 NN 很难理解一个词的感情,所以这个时候,需要把一个单词变成编号即可。 [Colab] from tensorflow.keras.preprocessing.text import Tokenizer sentences = [ 'i love my dog', 'I, love my cat', 'You love my dog!' ] tokenizer = Tokenizer(num_words = 100) tokenizer.fit_on_texts(sentences) word_index = tokenizer.word_index print(word_index) 运行后的结果 {'love': 1, 'my': 2, 'i': 3, 'dog': 4, 'cat': 5, 'you': 6} 当然还可以输出 word_docs 和  word_counts 。 那么问题来了,为什么 dog 和 dog! 元素是一样的呢?其实在处理的过程中,Tokenizer 会很智能的把每一个大小写或者标题符号给转换或者省略掉,当然 loves 和 love 也看成是一样的。 参考 Keras分词器 Tokenizer Sequencing - Turning sentences into data (NLP Zero to Hero - Part 2) 当统计好单词以后,怎么把句子变为一串编码呢?其实只需要插入多一句就可以让句子变成编码了。 [Colab]

安卓adb模拟输入太慢的几个解决方法

Image
前言 起初通过了adb shell input 来控制安卓的输入的时候,发现 adb shell input 非常慢,网上说 adb input 输入时要对本地进行 I/O 处理,通过 getevent 发现 adb 并没有对 event 进行操作。在这里我使用我之前写的 python自动玩连连看 来举个栗子,下面这个栗子使用的是夜神模拟器,Android 5。 注意 这篇讲如何使用 adb ,必须要对手机进行 root ,推荐使用安卓模拟器来实验。 问题 如果单纯的用 Python 进行控制 adb 的话,只用 adb 速度几乎一秒钟点击一次。 Python 伪代码: [Github] def run_list(setp_list): ... for setps in setp_list: for y,x in setps: tx = 131 + (x-1) * 74 ty = 146 + (y-1) * 91 subprocess.call("adb shell input tap " + str(tx) + " " + str(ty) , shell=True) 在这个情况下,对一些游戏场景还是不友好,比如玩连连看,到底要点到什么时候呢? 改进一:sendevent 在 Linux 中,有一个 /dev/input/ 的目录,里面的有各种 event ,这些 event 所触发的事件都是来自外部的各个输入设备,在 /proc/bus/input/devices 可以看到当前系统的各个输入设备。 [Github] root@shamu:/ # cat /proc/bus/input/devices ... I: Bus=0000 Vendor=1234 Product=0001 Version=0001 N: Name="Android_Input" // 安卓输入事件 P: Phys= S: Sysfs=/devices/virtual/input/input4 U: Uniq= H: Handlers=sysrq r

常用的图片相似度比较算法 目录引文

前言 对比两张图片的相似度,用来干啥大家都知道。 常用几种的算法 差异比较法:两张图片相加减,最后得到一个百分比。 How do I calculate the percentage of difference between two images using Python and OpenCV? 直方图统计:通过计算三种颜色的直方图,或者只计算一个颜色的直方图来做对比。   (什么是直方图?) Python-Opencv中用compareHist函数进行直方图比较进行对比图片 OpenCV Histogram Comparison [CN] 哈希算法:找图片特征码进行对比。 图像相似度中的Hash算法 python OpenCV 图片相似度 5种算法 TESTING DIFFERENT IMAGE HASH FUNCTIONS How to check similarity of two images that have different pixelization MSE & SSIM:通过每个像素的方差做对比。 Python计算两张图片的相似度 How to calculate the Structural Similarity Index (SSIM) between two images with Python 关键特征提取和匹配: 图像处理之特征提取 SIFT、SURF、ORB、HOG、LBP、HAAR特征的原理概述及OpenCV代码实现 python opencv3 基于ORB的特征检测和 BF暴力匹配 knn匹配 flann匹配 【python 图像相似度】OpenCV图像相似度ORB算法--相似图像去重 OpenCV-Python Feature2D 特征点检测(含SIFT/SURF/ORB/KAZE/FAST/BRISK/AKAZE) 综合: python图像识别---------图片相似度计算 Python计算图片之间的相似度 还有的谷歌找去吧

Haproxy 对 socks 做负荷均衡 带配置文件

前言 海外的用户如果要使用国内进行看剧可以去找免费的socks代理,可以利用Haproxy可以做到负荷均衡。 缺点 只能在Linux环境下使用,Proxychains 也可以做到负荷均衡,但是效果略渣。 Windows 用户可以考虑开一个VM进行流量传输 安装 sudo apt install haproxy 配置文件  /etc/haproxy/haproxy.cfg 模式 对于上面的情况 Haproxy 有两大 负荷均衡 模式: roundrobin -- 表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的, 对于实例启动慢的服务器权重会在运行中调整 。 leastconn -- 连接数最少的服务器优先接收连接。 leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。 但免费的SOCKS的代理 连接数是有限制的 ,比如一个代理只能由10个连接数,这个时候就可以用  leastconn 模式进行弥补了,如果遇到好的代理则可以考虑一下  roundrobin 模式 。 找免费代理 谷歌搜索免费代理,复制粘贴,用工具去验证。 工具 免费版的 Socks Proxy Checker Google 搜索 socks checker github 配置文件 [Github] global log /dev/log local0 log /dev/log local1 notice user root group root daemon //守护模式启动 defaults log global mode tcp timeout connect 5s //客户端和后端服务器建立连接的超时时间 timeout client 5s //与客户端的最长空闲时间 timeout server 5s //后端服务器到客户端的超时时间 timeout check 3s //对后端服务器的检测超时时间 option

V2ray 纯 Vmess 的 Socks 前置代理 配置文件

注意 !! 这个配置不适用于 tsl+ws+web,如果你要配置 tsl+ws+web 你可以参考 这篇文章   !! 前言 某些情况下需要让V2ray来走前置代理以便提高速度,或者需要走socks代理。 大概的流程图 Application <---> V2ray Client <--> Socks Server <--> V2ray Server 配置文件 [ Github] { "inbounds": [ { "port": 10808, // Local Listen Port "protocol": "socks", "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "settings": { "auth": "noauth" } } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "V2RAY SERVER", "port": V2RAY SERVER PORT, "users": [ { "alterId": 64, "id": "aaaa-bbbb-cccc-d