Posts

Showing posts from 2020

TensorFlow 之 Mane 个人用笔记(一)

Image
training_images = training_images / 255.0 test_images = test_images / 255.0 Before you trained, you normalized the data, going from values that were 0-255 to values that were 0-1. What would be the impact of removing that? Why should we normalize data for deep learning in Keras? model = tf.keras.models.Sequential([ #tf.keras.layers.Flatten(), tf.keras.layers.Dense(64, activation=tf.nn.relu), tf.keras.layers.Dense(10, activation=tf.nn.softmax)]) What would happen if you remove the Flatten() layer. Why do you think that's the case? You get an error about the shape of the data. It may seem vague right now, but it reinforces the rule of thumb that the first layer in your network should be the same shape as your data. Right now our data is 28x28 images, and 28 layers of 28 neurons would be infeasible, so it makes more sense to 'flatten' that 28,28 into a 784x1. Instead of wriitng all the code to

AI概论 第四周笔记 - AI and Society

Image
前言 这是 AI 概论的最后一篇内容,主要讲的是 AI 和人性方面的问题。禁止转载。 Week 4 Introduction 简单介绍下这篇笔记: AI 存在过度的炒作:AI确实正在改变世界,但现在媒体还存在过度的炒作。为了让普通民众、商业领袖 和政府领导可以快速上升职位,理解 AI 的前景还是相当重要的。 AI 存在局面性:前面几个星期说过,AI还存在一个局面行,并不是100%做得到。其实跟人一样,人也会犯错的,何况AI呢。 种族歧视:AI可能对少数群体或其他团体,存在着不公平的歧视。 高级AI攻击:例如,我们很喜欢使用的垃圾邮件过滤器,因为它使邮件系统能正常工作。但也有些垃圾邮件发送者 正尝试去攻击这些过滤器。即便我们继续开发新的AI技术,但还会受到一些新型攻击。 发展人工智能。 A realistic view of AI AI 对人类社会生活都产生了巨大的影响。我们需要对 AI 有一个客观的认识,不能过于乐观,也不能太悲观。如果你有听说过 金发姑娘和三只熊的故事,你就会知道故事里提到的粥 既不能太热,也不能太冷。故事里的床既不能太硬,也不能太软。 AI 也需要类似的 " 金发姑娘原则 " 因此我认为对于 AI 能够做的事也不能抱有太乐观的希望,当然也不能太过于悲观。 如果对AI技术太乐观而且不顾实际的话,会让人觉得AI是感知智能和超人工智能或强人工智能时代即将到来, 因此,就要投入大量的资源来抵御可怕的AI杀人机器。但是以这种做学术研究的角度来看,研究遥远未来的可能性并没有什么害处。比如研究 AI 哪一天会实现感知智能,这也没有什么害处。我们也不能过度投入资源来抵御一些中长期内都不会出现的风险。可能这几十年、几百年都不会出现,所以我觉得没有必要去害怕超级人工智能或强人工智能。这些不必要的恐惧会让我们分心且不去关注一些真正要解决的问题,也会让社会引起对AI的不必要恐惧。 反过来说,我们也不能对AI太过悲观,认为 AI 什么都做不了。有些事情 AI 不可能完成,所以 AI 的冬眠期将要到来。AI冬眠期是指在 AI 发展的历史中 陆续有几段时期AI被过度炒作,而当人们发现 AI 不能做到一切 人们就对 AI 丧失信心 并减少对 AI 的投资。 如今的 AI 技术 与几十年前冬眠

AI概论 第三周笔记 - Building AI in Your Company

Image
Week 3 Introduction 在过去的两周里你了学到了什么是人工智能 , 以及如何构建一个人工智能项目,一个公司要想应用人工智能 可能需要两三年的时间,不仅仅只是做过一个人工智能项目,而是一系列有价值的人工智能项目,而且做得很有效率。禁止转载。 这些将是你本周会看到的话题: 复杂的人工智能产品的案例研究:比如一个智能音响 或者一辆自动驾驶汽车。 团队中的主要工作类型:建立一个大型的人工智能团队时, 这也许是好几十人 甚至几百人, 这些人都会做些什么事情。 你也会了解到 人工智能转型手册:学习如何帮助你的公司转型成为擅长应用人工智能的公司。 Case study: Smart speaker 现在来研究一下智能音箱,打造一个复杂的人工智能产品是什么样的感觉呢? 这意味着不仅仅用一个单一的机器学习算法去学习从A到B的映射,为了打造一个复杂的产品,通常都是很多个人工智能结合在一起。 有一天你可能会说 "hi, Mane" ,作为触发词或唤醒词要唤醒一个智能音箱,他的工作原理是什么呢?简单来说我们会划分为4步: 第一步,是探测到触发词或唤醒词:当他们听到了唤醒或者触发词 "hi, Mane" ,NN 就会输出就是0或1 。一旦它听到触发词或唤醒词,听到 "hi, Mane" 时,它还必须接着执行第二步。 第二步,语音识别:也就是说,此时软件要做的是在得到 "hi, Mane" 的音频之后,把你说的话输出成文本。 第三步,用刚输出的文本,判断要交给哪个模块。比如"我要设置10分钟定时器",就把这句话交给定时器去处理。 第四步,模块去执行指令。 Case study: Self-driving car 自动驾驶一直都被称为神秘的技术,现在来一点一点的了解什么是自动驾驶系统。 汽车会接收各种各样的传感器作为输入,比如汽车前方、侧面或后方的图片,以及声波雷达 或激光雷达的传感器读数。有了这些作为输入就能探测出其他车辆的存在或所在位置,这样就可以发现附近有车,同时注意到行人的位置。因为我们想要避开其他车辆以及行人,所以汽车探测和行人探测 都可以通过机器学习来完成,即A --> B的过程,这里的输入可能是图

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

安装及使用 laravel 踩到的坑

使用 Ubuntu 系统 php7.4以上 安装的时候改阿里源会比较快,另外安装 Mysql 8.0 在 Ubuntu 19.10 系统里面需要修改源(改成 bionic )。 1. composer.phar 获取 laravel 前需要安装环境 $ sudo apt-get -y install php-mbstring php-xml 2. Mysql Driver 找不到 $ sudo apt-get install php7.4-mysql root@mane-virtual-machine:/home/mane# php -i | grep PDO PDO PDO support => enabled PDO drivers => mysql PDO Driver for MySQL => enabled 有enabled就好了。 3. Laravel 提示 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 参考: 这篇文章 4. Access denied for user 'homestead'@'localhost' (using password: YES) 明明.env环境有指定用户名是root $ php artisan config:clear

Allwinner H2+ Sysbench CPU Test (1)

这一篇是关于手上的 全志H2+ CPU 的个人测试结果,仅此参考而已! 对了,裸机,没有任何散热芯片。 首先,看 Linux 上的平台数据: $ lscpu Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Model name: ARMv7 Processor rev 5 (v7l) CPU max MHz: 1008.0000 CPU min MHz: 480.0000 $ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 48.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU revision : 5 processor : 1 model name : ARMv7 Processor rev 5 (v7l) BogoMIPS : 48.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc07 CPU rev

整理某理工大学的 Python 总结

Python Object 如果就只是比较两个变量是否相同的时候,就用 == 就足够了,但是有些很特殊的时候,需要用到比较内存地址,当需要比较两个内存地址是否相同的时候就可以用 is 。 比较内存是否相同可以用  is  或者  is not  ,所以说和 == 很相似。 值得注意的是当调用 == 时,就会调用默认的构造方法 a.__eq__(b) 。 不仅如此我们经常会用 is 来比较 None 。 创建对象的时候会调用 __new__() 来创建新的 object ,但是还会调用 __init__() 来初始化它,这个时候只需要重写 __init__() 方法就可以初始化对象的属性。 这里需要注意的是,如果你把一个 Class 加入 Set 集合,这个时候必须要重写 __eq__ 和 __hash__ 对象,是因为 Python 优化机制的问题,当 hash 值一样的时候,Python 默认就不会新建一个对象,以便节省内存空间。当然这个时候也不希望出现新建同一个物体的时 __hash__ 都不一样、新建不同物体时, __hash__ 值都一样的情况,除非你知道你在做什么。 如果只写  __hash__  就会有很多 bug 出现,所以官方希望你写  __hash__ 之前写上 __eq__ 。 现在来看一段代码: a = Product('Apple ][', 1977) #新建一个类,让a指向这个类的地址 b = a #b指向与上面这个类的地址 c = Product('Canon EOS 5D', 2005) #新建一个类,c指向与这个类的地址 a = c #a = c 也就是说a和c所指的都是新建第二个类的地址 a.name = 'Canon EOS1D X' #当修改a的属性,也就是修改a所指向的地址的属性 b.year = 1980 c.year = 2011 你会发现其实 python 里面很多都是跟地址有关系的。 另外,你还可以重写很多内部函数,比如: __str__ :重写此函数 python 会在调用 print() 之前判断是否有返回值,如果有优先调用。 __repo__ : 默认情况下, __repr_