将训练好的Tensorflow模型部署到Web站点
通过Google发布的tensorflowjs,我们可以将训练好的模型部署到任何一个支持静态页的web服务器上,不需要任何后台服务即可运行tensorflow,部署过程非常简单。
安装tensorflowjspython万金油安装法 pip install tensorflowjs
转换模型1tensorflowjs_converter --input_format=keras ./models/yourmodel.h5 ./models/modelforjs
后面2个参数第1个是保存好的tf模型路径,第2个参数是输出路径,会生成一个modelforjs目录,里面包含一个model.json文件和二进制数据文件
部署到Web服务把生成好的modelforjs拷贝到web服务上,同时引用这个js<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"> </script>
调用模型123var model = await tf.loadLayersMo ...
经典博弈问题的动态规划解法
问题亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回 true ,当李赢得比赛时返回 false 。
示例:
输入:[5,3,4,5]输出:true解释:亚历克斯先开始,只能拿前 5 颗或后 5 颗石子 。假设他取了前 5 颗,这一行就变成了 [3,4,5] 。如果李拿走前 3 颗,那么剩下的是 [4,5],亚历克斯拿走后 5 颗赢得 10 分。如果李拿走后 5 颗,那么剩下的是 [3,4],亚历克斯拿走后 4 颗赢得 9 分。这表明,取前 5 颗石子对亚历克斯来说是一个胜利的举动,所以我们返回 true 。
思路如果一个问题可以分解成一个子问题,而子问题又可以分解成一个更小的子问题,那么我们就可以考虑用递归的方式来实现,比如斐波拉契数列。不过递归的方式有个严重 ...
单例模式(Singleton)
意图单例模式是一种创建型模式,它能确保一个类只有一个实例,并提供一个访问该实例的全局节点。
问题
单例模式同时解决了两个问题, 所以违反了单一职责原则:保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源(例如数据库或文件)的访问权限。它的运作方式是这样的: 如果你创建了一个对象, 同时过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。注意, 普通构造函数无法实现上述行为, 因为构造函数的设计决定了它必须总是返回一个新对象。
为该实例提供一个全局访问节点。想想你曾用过的那些存储重要对象的全局变量,它们在使用上十分方便, 但同时也非常不安全,因为任何代码都有可能覆盖掉那些变量的内容,从而引发程序崩溃。和全局变量一样, 单例模式也允许在程序的任何地方访问特定对象。 但是它可以保护该实例不被其他代码覆盖。还有一点: 你不会希望解决同一个问题的代码分散在程序各处的。 因此更好的方式是将其放在同一个类中, 特别是当其他代码已经依赖这个类时更应该如此。
解决方案一个类的对象永远只会在当前进程中被创建一次,也 ...
状态模式(State)
意图状态模式是一种行为型模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
问题状态模式与有限状态机的概念紧密相关。
其主要思想是程序在任意时刻仅可处于几种有限的状态中。在任何一个特定状态中,程序的行为都不相同,且可瞬间从一个状态切换到另一个状态。不过,根据当前状态,程序可能会切换到另外一种状态,也可能会保持当前状态不变。这些数量有限且预先定义的状态切换规则被称为转移。
你还可将该方法应用在对象上。假如你有一个文档Document类。文档可能会处于草稿Draft、审阅中Moderation和已发布Published三种状态中的一种。文档的publish发布方法在不同状态下的行为略有不同:
处于草稿状态时,它会将文档转移到审阅中状态。
处于审阅中状态时,如果当前用户是管理员,它会公开发布文档。
处于已发布状态时,它不会进行任何操作。
状态机通常由众多条件运算符(if或switch)实现,可根据对象的当前状态选择相应的行为。 “状态” 通常只是对象中的一组成员变量值。即使你之前 ...
搭建一个Git服务有多简单,只需四个步骤
Git作为分布式的源码管理工具,已经受到了越来越多人的青睐。和SVN的中心化服务不同,Git服务主要是将各个客户端的源码版本进行同步,类似于共享目录的作用,只是为了方便不同开发人员将各自的版本进行交换,不像SVN那么依赖于服务器。现存的Git服务器有Github,码云之类的,不过如果涉及到代码保密,不想上传到其他第三方公司托管,那么就可以自己搭建一个Git服务。搭建一个Git服务有多简单呢?本文以一个树莓派为例,描述如何在Linux操作系统上创建Git服务。
安装git输入命令:
1$ sudo apt-get install git
创建账号
添加一个用户,名字叫git, $ sudo adduser git,仅作为git服务使用,这里账号名其实是没有要求的,这个名字只会影响你的项目地址
修改该账号的默认bash,将该账号的默认bash设置为git-shell,这样该账号只能作为git使用,不可登录输入命令sudo vim /etc/passwd,找到这一行(你刚建完账号,应该在最后一行)git:x:1001:1001:,,,:/home/git:/bin/bash,将其修改为gi ...
推荐一款内网穿透的利器-NSmartProxy
什么是NSmartProxy?NSmartProxy是一款免费的内网穿透工具。使用中如果有任何问题和建议,可以点击这里加入Gitter群组或者点击这里加入QQ群(群号:813170640)我们一起讨论。
特点
跨平台,客户端和服务端均可运行在MacOS,Linux,Windows系统上;
使用方便,配置简单;
多端映射,一个NSmartProxy客户端可以同时映射多种服务。
支持TCP协议栈下的所有协议(已经经过测试的有FTP、Telnet、SMTP、HTTP/HTTPS、POP3、SMB、VNC、RDP。),以及相当一部分基于UDP的协议(已经经过测试的有DNS查询、mosh服务)。
运行原理NSmartProxy包含两个服务程序:
服务端(NSmartProxy.ServerHost):部署在外网,用来接收来自最终使用者和客户端的反向连接,并将它们进行相互转发。
客户端(NSmartProxyClient):部署在内网,用来转发访问内网各种服务的请求以及响应。
客户端安装NSmartProxy支持各种基于TCP和UDP服务的端口映射,下面以mstsc,iis,ftp以及m ...
观察者模式(Observer)
意图观察者模式是一种行为型模式,允许你定义一种订阅机制,可在对象事件发生时通知多个 “观察” 该对象的其他对象。它定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
问题假如你有两种类型的对象:顾客和商店。顾客对某个特定品牌的产品非常感兴趣(例如最新型号的iPhone手机),而该产品很快将会在商店里出售。
顾客可以每天来商店看看产品是否到货。但如果商品尚未到货时,绝大多数来到商店的顾客都会空手而归。
另一方面,每次新产品到货时,商店可以向所有顾客发送邮件(可能会被视为垃圾邮件)。这样,部分顾客就无需反复前往商店了,但也可能会惹恼对新产品没有兴趣的其他顾客。
我们似乎遇到了一个矛盾:要么让顾客浪费时间检查产品是否到货,要么让商店浪费资源去通知没有需求的顾客。
解决方案由主题订阅并维护多个观察者,当主题发生变更,则所有观察者收到通知,并各自维持自己的状态。
拥有一些值得关注的状态的对象通常被称为目标,由于它要将自身的状态改变通知给其他对象,我们也将其称为发布者(publisher)。所有希望关注发布者状态变化的其他对象被称为订阅者(subs ...
看了这篇文章,你应该可以应付工作中90%的git命令
本文主要描述了常用的git命令和原理,也可用作日常工作的参考手册...
回文数
问题判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:
输入: 121输出: true
示例 2:
输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?
思路解法一简单粗暴,直接将数字转成字符串,然后将字符串反转,比较2个字符串是否相等。
123def isPalindrome(self, x: int) -> bool: s=str(x) return s==s[::-1]
解法二将数字进行反转,原始数字不断模10,取模乘以10,直到原始数字等于0,比较最后得到的数字和原始数字是否相等。有2个特殊情况一定不是回文数,可以直接返回False:
负数
结尾为0,如果这个数字本身不等于0,但是结尾为0,肯定不是回文数,因为数字开头一定不会是0
12345678def isPalindro ...
狗屁不通文章生成器
介绍随便输入一个主题,生成一篇万字文章。本文直接引用了@menzi11的源码,大家如果有兴趣,可以进作者Github主页查看😄。
文章生成请输入一个主题:
window.$ = function (selector) {
return document.querySelector(selector);
}
let 主题 = "一天掉多少根头发"
let 论述 = [
"现在,解决主题的问题,是非常非常重要的。 所以, ",
"我们不得不面对一个非常尴尬的事实,那就是, ",
"主题的发生,到底需要如何做到,不主题的发生,又会如何产生。 ",
"而这些并不是完全重要,更加重要的问题是, ",
"主题,到底应该如何实现。 ",
"带着这些问题,我们来审视一下主题。 ",
"所谓主题,关键是主题需要如何写。 ",
"我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 ",
"问题的关键究竟为何? ",
"主题因何而发生?",
"每个人都不得不面对这些问题。 在面对这种问题时 ...