TensorFlow笔记(1)——TensorFlow中的相关基本概念

前言 Tensorflow 是一个编程系统,使用图(graph)来表示计算任务,图(graph)中的节点称之为 op (operation),一个 op 获得 0 个或多个 Tensor,执行计算,产生 0 个或多个 Tensor。Tensor 看作是一个 n 维的数组或列表。图必须在会话(Session)里被启动。 基本概念 使用图(Graph)来表示计算任务 在被称为会话(Session)的上下文(context)中执行图 使用tensor表示数据 通过变量(Variable)维护状态 使用feed和fetch可以为任意的操作赋值或者从中获取数据 下图显示了Session、Graph、Tensor、Variable之间的关系 ...

TensorFlow笔记0——在Ubuntu 18.04安装tensorflow 1.12 GPU版本

在之前的深度学习中,我是在MAC上跑CPU版本的tensorflow程序,当数据量变大后,tensorflow跑的非常慢,在内存不足情况下,又容易造成系统崩溃,这个时候我觉得不应该浪费我的限制的微星游戏本,便想着拿来跑深度学习的代码。 1. 配置信息 我的老电脑配置如下: CPU i5-4210M 16G内存 GPU GTX 950M 显存2G 128G SSD Ubuntu 18.04 这个配置一般,但是为了不让我的mac发光发热,同时体验下GPU给深度学习的加速效果(虽然可能加不了多少速度)以及不想让老电脑荒废的心,我最终决定还是在上面安装Ubuntu18.04跑TensorFlow了。 2. 选择安装所需软件...

TensorFlow笔记2——利用TensorFlow训练一个最简单的一元线性模型

前言 这是一次使用《TensorFlow笔记(1)——TensorFlow中的相关基本概念》中学习到的知识进行机器学习的实验,一来是为了理解机器学习大概是什么样的,另一方面也算是将之前学习到的一些知识活学活用。 本次实现的环境为: macOS Mojave 10.14.1 python 3.7.0(pyenv) Tensorflow 1.12.0 numpy 1.15.4 简单介绍下机器学习是什么 机器学习和人类学习的过程: ...

TensorFlow笔记3——利用TensorFlow和MNIST数据集训练一个最简单的手写数字识别模型

前言 当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。就好比编程入门有Hello World,机器学习入门有MNIST。 MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片: 它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。 其实训练一个简单的手写数字识别模型的代码很短,我的示例代码总共也就50行,除去注释、空格之类的估计连30行也没有,但是去理解包含在代码中的设计思想是很重要的,因此这篇笔记我会将我对每段代码的理解都记录下来。 参考: MNIST机器学习入门 机器学习-损失函数 ...

TensorFlow笔记4——优化手写数字识别模型之代价函数和拟合

前言 上篇笔记我们利用MNIST数据集训练了一个手写数字识别的模型,但是准确率非常的低,维持在91%左右,我们可以尝试着将准确率提高到96%以上,在实验之前我们需要先了解一些基本的概念,本篇文章可能会有些枯燥,因为大多都是理论知识。 本文重点 激活函数 代价函数 拟合 什么是激活函数?激活函数是干嘛的? 想了解什么是激活函数,就要先了解神经网络的基本模型,下图所示为一单一人工神经网络的基本模型图: ...

TensorFlow笔记5-—优化手写数字识别模型之优化器

什么是优化器(Optimizer) 神经网络越复杂 , 数据量越大 , 我们需要在训练神经网络的过程上花费的时间也就越多. 原因很简单, 就是因为计算量太大了. 可是往往有时候为了解决复杂的问题, 复杂的结构和大数据又是不能避免的, 所以我们需要寻找一些方法, 让神经网络聪明起来, 快起来。那些可以加速神经网络训练的方法就叫做优化器(Optimizer) 推荐阅读:加速神经网络训练 (Speed Up Training) 常见的优化器 这个部分的理论知识实在太多了,我简单的整理了一点点,详见机器学习:各种优化器Optimizer的总结与比较 下面是TensorFlow中提供的相关优化器的API ...

plainify

一个科班小前端的大厂面经

「跟我来面试」系列的第一篇文章是关于前端的,发出后看到有读者反馈说内容较少,问的问题比较基础。因为博主是后端的,前端方面并不是非常了解,所以我找到了同组的小伙伴,让他分享一下自己春招时的一些经历。 他和我是同一个实验室的,就叫他 x 吧,目前研一,两年制硕士,今年实习。x 的本科前半段迷茫在科班的基础理论学习和课程作业中,大一大二对前端一无所知,没想关心太多,只想保研就好。大二暑假参加一项学校项目,机缘巧合接触到了前端,发现软件工程还有很多值得探寻的地方。大三时他的保研形势已定,于是参加各种比赛,摸索自己的兴趣所在,终于在一系列比赛中尝到了前端的甜头,于是决定正式入坑,带着起初“前端能让页面好看”这般粗浅好笑的见识,打开新世界,一步步丰富自身。终于在这次春招中取得了一些小成果: 网易雷火三轮技术+HR,拿到 offer。 字节跳动教育业务三轮技术+HR,拿到 offer。 美团两轮技术,leader 给了口头 offer。 阿里淘系目前三面结束,被大 leader 全方位调教,拿到 offer 腾讯 PCG 到第四面,战线很长,后续没有继续面腾讯,淘系 offer 拿到后就推掉了这里。 说实话,你可能不知道花一个月时间拿到 4 个大厂 offer 是什么体验,我们一般都管这种人叫“offer 收割机”。 在这里分享下面经,附带他的简要回答和思考。对于基础问题,大家可以查漏补缺,建议收藏;对于场景或者高层思考型问题,大家参考即可,这些都是面试官根据自己部门或每个人的履历定制的。轮次越多,问题也就越偏向高层,需要大家更多的总结思考,找到平衡,甚至再生产。 点击文章底部**「阅读原文」,即可查看他的个人主页。以下是他的整理,篇幅较长,建议大家收藏**,方便复习 👇 网易雷火三轮技术+HR 一面 一面一般都是基础,在回答问题的基础上,最好能主动发散广度深度,面试官印象会很好。 介绍下自己并聊聊项目。 这个因人而异,要大方得体,讲出重点。主要围绕项目是什么,为何要做这个项目,解决了什么痛点,你在其中负责了什么工作,遇到并解决了什么问题,如何和不同模块合作,把控了多少架构。后两点需要一定思考和积累,把前面的讲清楚能满足一些面试官,但是大厂面试官常常会希望你说一些架构和整体方面的理解,是加分项。 如何用 await 和 async 写一个睡眠函数? function sleep(time){ return new Promise(function(resolve,reject){ setTimeout(()=>resolve('over'),time); }); } async function run(time){ let result = await sleep(time); console.log(result); } run(3000);复制代码 说说 inline 元素和 inline-block 元素的区别。 CSS 基础题,我从布局方面不换行和尺寸方面 inline 设置宽高无效,inline-block 可以来讲,还发散了一些 CSS 元素体系讲了讲。 inline 元素的 margin 有用吗? 是一个很刁钻的切入口,大家常常忽略对 inline 元素的研究,还好我平时比较喜欢捣鼓 CSS,其实再默认水平方向的文档下,设定水平方向 margin 是有效的,垂直方向无效。 讲讲 html 如何添加事件监听,事件处理有哪些阶段? 添加事件监听很简单,document.addEventListener 就能直接来,事件阶段按时间顺序有捕获,目标,冒泡三段。 说出三个你知道的不常用的 html 标签。 一般都问那些常用的,结果面试官反其道行之,很佩服。当时只答出<iframe><strong><i><audio>,可以百度一下,其实有很多。 二面 因为我 React 技术栈比较多,所以这方面问题也多,大家按需食用。 ...

plainify

一次跨域问题的分析

事件起因 一个需求让我开放一个 HTTP 接口给前端,在联调的过程中,前端请求时出现了一个 CORS 错误,也即跨域问题,错误如下 👇 一开始我的想法是,跨域问题,这我熟啊,在学校写代码的时候就经常遇到,这解决起来不是分分钟的吗。 可更改之后我傻眼了,为什么一直不生效?我陷入了沉思。 在继续描述之前,我们先来了解下到底什么是跨域以及常见的解决方案有哪些。 什么是跨域 所谓跨域,全称是 跨源资源共享 (CORS) Cross- Origin Resource Sharing ,是一种基于 HTTP Header 的机制,该机制通过允许服务器标示除了它自己以外的其它 origin(域,协议和端口),这样浏览器可以访问加载这些资源。 举个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 分别发起两个请求 👇 请求A: https://domain-a.com/query 请求B: https://domain-b.com/query 由于发请求的页面站点为 domain-a.com,所以请求 A 属于同源请求,domain-a.com 的后台服务器是允许请求。但是请求 B 的站点域是 domain-b.com,如果要发请求到 domain-b.com,就属于跨源访问,出于安全性考虑,浏览器限制脚本内发起的跨源 HTTP 请求。如下图所示: 因此,为了解决上述问题,跨源域资源共享( CORS )机制就应运而生了。该机制允许 Web 应用服务器进行跨源访问控制,从而使跨源数据传输得以安全进行。 CORS 工作机制 跨源资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。 而且对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。 只有在服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。 ...

plainify

一统江湖?——Flutter for All Screens初体验

前言 2018 年 2 月 27 日,Google 发布了 Flutter 的第一个 Beta 版本,由于自己是一个 Google 粉,所以很快就下载尝鲜了,之后还在简书上发过一篇博客《你好,Flutter》,是我的第一篇阅读量过 10w 的文章。在学习 flutter 期间也做过一些零散的笔记,但由于当时觉悟不高,并没整理成册,而且当时正准备保研,手头事情很多加上可学习的资料很少,中途便放弃了。 机缘巧合,最近阅读到了一篇谷歌开发者的文章《Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop》,说是现在的 Flutter 已经可以运行在 Android、ios、MacOS、Linux、Windows 和嵌入式设备上了。在好奇心的作祟下,我尝试着利用 Flutter 在一些平台上运行了一些 demo,本文便是记录我利用 Flutter 实现了移动端、桌面端和 Web 端的过程,由于移动端应用的 demo 网上教程很多,所以本文尽快略过,重点将放在桌面端和 web 端。 Flutter for Mobile 初次了解到 Flutter 的时候便是一个横跨 iOS 和 Android 两个平台的框架,无论是在 Mac/Linux 还是 Windows 上搭建 Flutter 的开发环境都很简单,Windows 上的环境搭建可以参考这篇文章 👉《安装搭建 Flutter 环境》,Mac/Linux 可以参考中文官网给出的教程 👉《安装和环境配置》 如果你在中国的网络环境下使用 Flutter,注意一定要按照要求设置好两个环境变量 export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 配置好 Flutter 开发环境后,我们通过 Android Studio 新建一个 Flutter 项目,然后启动 iOS/Android 模拟器,选中要运行的模拟器,直接运行 Flutter 项目即可。运行结果如下: ...

plainify

不是总结的年终总结

年底照例要写一篇总结,从 12 月初我就说要写,如今都要元旦了,我还没想好写什么。往前翻了翻,前两年的总结更像是陈列了自己一年所做的事,等开始回顾今年,才发现整个人仿佛停滞了,竟没有什么值得总结的事情。既然这样,就趁着这个机会好好吐槽一下自己吧。 我是 2018 年开始写的总结,那是我人生重要转变的一年,那年我 20 岁。也是那一年,我开始变的上进,开始不断尝试自己的上限。如今 3 年过去了,我的各项能力确实有了提升,现在的我控制得了自己的体重,能静下心看几个小时的书,可以一个人悠闲的听歌、扫街拍照,也不会和以前一样羞于和女生交谈。最重要的是,我变强了,头还没秃。 而今年是我三年计划的最后一年,对我来说是既平凡又不平凡的一年。疫情对这个国家有很大的冲击不假,但对我而言,受到的冲击可能并没有那么大。年初在家不让出门,刚好给我了安心学习、健身的机会;美股熔断对我这个不炒股、偶尔玩玩基金的人来说鲜有影响;年初火起来的网课刚好给了我安心准备春招的机会,毕竟只要登入会议系统就不会算你翘课。这么一看这一年太过平淡,1 月过年、2、3 月准备春招实习、4、5 月在家躺着,6、7、8、9 在外实习提前体验社畜生活,10、11、12 月忙活毕设、论文。一眨眼,一年就到头了。 可真有这么好吗? 今天我翻了翻我 2018 年的总结,虽然这两年我的文笔依旧没什么变化,但可以真切的感受到那一年的自己是一个多么积极乐观的人。然后到了 2019 年,我给自己的评价是**「想法太多,行动太少」,但总归是积极向上的一年。2020 这一年,我给自己的评价是「被自己安排的明明白白」。**这一年我依旧按照给自己设置的条条框框去做事,去阿里实习、定时更文、写代码做东西,仿佛一切都井然有序,不曾变化。 yoga 之前问过我,你这样像 todo list 一样一件一件去安排自己,就像完成任务一样,做事情是,谈恋爱也是,不会很累吗?我当时的回答是不会,因为这几年我认为井然有序的生活会避免自己犯错的可能。可最近发生的一些事情让我有些崩溃,我想变得更优秀,这没什么错,只是我忘了,在追求的过程中,有期待就会有遗憾,有的遗憾可以坦然面对,有的遗憾却会让你花一辈子时间去后悔。听起来很可惜,却也无能无力。 害,写了这么多字都不知道自己在写什么,现在看看,这篇文章可能就和我这一年一样真的没什么好看的吧。 GitHub 提交 282 次,上半年准备春招、中间忙着实习,码代码的时间都集中在今年的后半段了,不多不少。 公众号涨粉 1500 左右,和去年基本一致,对于公众号我没什么想说的,目下高质量的公众号越来越少,虽然感觉什么公众号粉丝都比我多,但我还是想按照自己的思路走下去,争取每篇都是高质量的原创文章。 目前掘金的年度报告还没出,自己也懒得统计了,就用简书的代替一下。 在浏览了几个 APP 的年度报告后,我终于明白了,原来我的 2020 只是 2019 的延续罢了。这一年在我身上并没有发生任何新鲜事,反倒被前几年犯下的错误反噬,我想我这一年的不快乐也是源于此吧。 朋友们都说我是凡尔赛本赛,毕竟我有很多别人羡慕不来的东西,只是于我而言,现下我所得到的并不能减少遗憾给我带来的痛苦。很快我就要开始新的人生旅程了,2021,希望可以收起自己的凡尔赛,正视心中所想,回到三年前快乐的自己,也希望老天眷顾,让我不再留有遗憾。 这篇文章与其说是总结倒不如说是对自己的一个反思,因此也没有发在首页,如果你看到这里,非常感谢,我用我的好运气祝你在新的一年里可以牛气冲天 🐂。