基于深度学习移动端xxxx系统开发日志day1

昨天老师分配的任务,我:租赁及搭建服务器,负责前端与算法的对接。

丝毫没有头绪。

上午,试探性地在阿里云上逛来逛去,发现服务器种类繁多,而我只了解web服务器一种。

引自:https://baike.baidu.com/item/服务器/100571?fr=aladdin

服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

服务器的构成包括处理器硬盘内存系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

在网络环境下,根据服务器提供的服务类型不同,分为文件服务器,数据库服务器,应用程序服务器,WEB服务器等。

本学期所学的前端知识面向我们的知识服务器中的一种,web服务器。

引自:https://zhidao.baidu.com/question/1726392.html

Web服务器(Web Server)
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。
 

 就我的理解简单来说,web服务器最初的目的仅限于浏览文档,提供下载,与数据库结合可以做数据库的查询工作,后期随着技术的发展可能会有功能上的加强强和拓展,但还是会受自身性质的限制。

显然他不能满足我们系统的要求。

我瞄准了应用服务器。

引自:https://baike.baidu.com/item/应用服务器/4971773

应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。

……

根据定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向 浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就像你调用对象的一个方法(或过程 语言中的一个函数)一样。

应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至 是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻 辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。

在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例 如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

这个看起来符合我的要求:调用方法。

我们的思路便是通过手机将照片上传到服务器,服务器接收到之后调用深度学习模型来做出判断,再将结果返回给用户。

基础知识有了一丢丢,记起来可以申请试用阿里云服务器。

申请又是一件让人头大事儿。

看傻了这么多改用哪一个呵呵哒???

 了解了一下,都看了一点,根本看不懂就i我大学两年学的这点东西屁用都没有(我是渣渣)

好在可以免费申请的服务器种类不多,就随便申请了一个ECS服务器。

那么了解一下:

云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务。使用云服务器ECS就像使用水、电、煤气等资源一样便捷、高效。您无需提前采购硬件设备,而是根据业务需要,随时创建所需数量的云服务器ECS实例。在使用过程中,随着业务的扩展,您可以随时扩容磁盘、增加带宽。如果不再需要云服务器,也能随时释放资源,节省费用。

下图列出了ECS涉及的所有资源,包括实例规格、块存储、镜像、快照、带宽和安全组。您可以通过 云服务器管理控制台 或者 阿里云 App 配置您的ECS资源。

……

看不懂了吧

  • 地域和可用区:是指ECS资源所在的物理位置。
  • 实例:等同于一台虚拟机,包含CPU、内存、操作系统、网络、磁盘等最基础的计算组件。
  • 实例规格:是指实例的不同配置,包括vCPU核数、内存、网络性能等。实例规格决定了ECS实例的计算和存储能力。
  • 镜像:是指ECS实例运行环境的模板,一般包括操作系统和预装的软件。操作系统支持多种Linux发行版本和不同的Windows版本。
  • 块存储:包括基于分布式存储架构的 弹性块存储,以及基于物理机本地硬盘的 本地存储
  • 快照:是指某一个时间点上一块弹性块存储的数据备份。
  • 网络类型:包括
    • 专有网络:基于阿里云构建的一个隔离的网络环境,专有网络之间逻辑上彻底隔离。更多信息,请参考 专有网络VPC
    • 经典网络:统一部署在阿里云公共基础内,规划和管理由阿里云负责。
  • 安全组:由同一地域内具有相同保护需求并相互信任的实例组成,是一种虚拟防火墙,用于设置不同实例的网络访问控制。
  • SSH 密钥对:远程登录Linux ECS实例的验证方式,阿里云存储公钥,您需要自己妥善保管私钥。您也可以选择使用 用户名密码 验证登录Linux ECS实例。
  • IP地址:包括用于 内网通信 的内网IP或私有IP,以及用于访问Internet的公网IP。
  • 弹性公网IP:可以与实例反复绑定或解绑的静态公网IP地址。
  • 云服务器管理控制台:是指ECS的Web操作界面。

那么……现在懂了点吧?

 我就这么申请了一台入门级的云服务器ECS,在我的理解就是多了台电脑。

我照着这个教程,把服务器启动起来了。千辛万苦……

https://yq.aliyun.com/articles/225271

 但是有一点注意,我没有用Xshell和Xftp,我用的windows自带的远程桌面。主要有两个原因:一是这俩我没搞懂咋用,密钥跟账户密码登陆都不太会用,遂放弃。二来远程桌面很好用还可以选择本地磁盘作为数据存储盘来访问,很方便上传文件和软件。

https://help.aliyun.com/knowledge_detail/40848.html

 我参考的这篇文章。

另外很多网友在无法登陆服务器时选择关闭服务器防火墙,我不太懂老觉得可能不太好虽然我这小破服务器也不会有人闲的没事儿进来玩但是强迫症你永远无法理解。

我选择添加了一个安全组。

当时看的不是这篇但是思路一样。

https://help.aliyun.com/knowledge_detail/40596.html

 就这样,我的电脑终于他妈的可以连接我的服务器了有点爽。

激动完了发现其实自己没干啥事儿。我还需要搭建一个php环境。

当时教程上说了怎么建可是人家是centos系统,我用的windows server 2008。

我能想到的最好的方法就是用wamp了。

我就把wamp安装包放到当初用作数据盘的本地磁盘里然后间接的上传到服务器上,并且装好了。

问题:mysql警告,无法定位程序输入点TryAcquireSRWLockExclusive于动态链接库KERNEL32.dll上。卒。

办法还是有的,网友多是另外装的一个低版本的mysql。

我转念一想我好像用不大数据库索性就这样吧反正用不到所以现在我的wamp还是一直黄着的。

下午,准备学php,但是好像没有好的教材,还是学学tensorflow跟python吧。先把环境重新配了一遍,了解了很多辛酸的故事:Anaconda自带python不需要额外装了这就是同时看两本教材的后果。之前nvcc找不到命令的问题一直没解决,cuda还有问题。python的ide还没有着落我一直以为spyder没有装成。tensorflow用pip安装装到windows目录下了!我当时傻不知道用Anaconda里的prompt装!于是只能卸掉重装我日你仙人板板。

这样一来我的电脑跟啥都没装之前差不多了,又折腾了几番,吧cuda卸了装装了卸来来回回三四遍吧,换了三个版本,最终敲定在9.0。因为之前跑了个例子跑不了,Anaconda里的tensorflow版本不支持9.2。对了我装的gpu版的,所以要有cuda。

所有的乱七八糟都弄完了后,我用vs code写了个例程,模拟y=2x的,给一组噪音数据来模拟出来公式兵器给出曲线。

vsCode有个大坑,结果只能一个一个出,比如一段代码好几张图除了第一张才出第二张完了再出第三张,不把前面的关掉后面的出不来,而且包括文字。

贴贴代码,困,中午没睡觉玩盐和避难所了,明早接着干,周五前要把服务器搞得差不多

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

plotdata = { "batchsize":[], "loss": []}
def moving_average(a, w=10):
    if len(a) < w:
        return a[:]
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]

train_X = np.linspace(-1, 1, 100)
train_Y = 2*train_X+np.random.randn(*train_X.shape)*0.3 #y=2*x,但是有噪声

plt.plot(train_X, train_Y, 'ro', label='Original Data')
plt.legend()
plt.show()

X = tf.placeholder("float")
Y = tf.placeholder("float")

W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")

z = tf.multiply(X, W) + b

cost = tf.reduce_mean(tf.square(Y-z))
learning_rate=0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

init = tf.global_variables_initializer()

training_epochs = 20
display_step = 2

with tf.Session() as sess:
    sess.run(init)
    plotdata = {"batchsize":[],"loss":[]}

    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})

        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X:train_X, Y:train_Y})
            print("Epoch:", epoch+1, "coast=", loss, "W=", sess.run(W), "b=", sess.run(b))
            if not (loss == "NA"):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)
    
    print("Finished!")
    print("coast=", sess.run(cost, feed_dict={X:train_X, Y:train_Y}), "W=", sess.run(W), "b=", sess.run(b))

    plt.plot(train_X, train_Y, 'ro', label='Original data')
    plt.plot(train_X, sess.run(W)*train_X + sess.run(b), label='Fittedline')
    plt.legend()
    plt.show()

    plotdata["avgloss"] = moving_average(plotdata["loss"])
    plt.figure(1)
    plt.subplot(211)
    plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
    plt.xlabel('Minibatch number')
    plt.ylabel('Loss')
    plt.title('Minibatch run vs. Training loss')

    plt.show()

结果自己跑跑看,这是书上的例程没有任何问题,有问题的话是自己环境没配对。

晚安各位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值