前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题。

1.
不能创建抽象类的实例。

回到目录

但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗。某篇文章的内容是属于体育新闻还是经济新闻等,这个结果是有一个全集的离散值,这类问题就是分类问题。

2.
抽象类主要是用来作为基类,但是抽象类也可以继承其它普通类或抽象类。

官方的不一定是对的,机器最能证明一切

不知道从什么时候起,我们在写数据库连接,网络连接,文件操作时会习惯加上using,这种习惯被我们误称为一种模式,但事实上,一切事情都有因有果的,使用using的作用是什么?我想这个问题大家都知道应该,它可以释放资源,而对于数据库连接来说,它不是释放数据连接,而只是把连接放里“连接池”,等待下次使用时,直接用池子里取出来即可,好处当然就是省去了很多“建立连接”时的开销,而不对网络连接来说,则不是那么简单了,不能一同而义,这点对于MSDN也有错误的说法和写法,最近在看博文时(老外的,Infoq上翻译的)给出了有利的证据,具体看下文。

我有时会把回归问题看成是分类问题,比如对于房价值的预测,在实际的应用中,一般不需要把房价精确到元为单位的,比如对于均价,以上海房价为例,可以分为:5000-10万这样的一个范围段,并且以1000为单位就可以了,尽管这样分出了很多类,但至少也可以看成是分类问题了。

3.
抽象成员中可以包含抽象成员和普通带实现的成员。

using的写法其实就是对IDispose模块的实现 

  using (var http = new HttpClient(handler))
   {
    http.Timeout = new TimeSpan(0, 0, timeOut);
    HttpResponseMessage response;
    response = http.GetAsync(GeneratorUri(requestUri, ApiValidateHelper.GenerateCipherText(nv))).Result;
    return response;
   }

对于上面的代码,也是MSDN推荐的写法,即在使用完网络资源后,自动释放它,而对于下一次网络资源的访问,还需要从新去构建,事实上,从资源的销毁到下次资源的建立需要很大的代价,而且你的网络连接的构建(套接字)是有限制的,并不是无穷无近的,所以,我们必须要进行控制。

相关中文文章:

相关英文文章:

下面是大叔对using方式进行的测试,可以通过截图看到,我们的TCP连接有很多,这样当高并发情况下,你的套接字连接将会被用斤。

澳门微尼斯人手机版 1

可用套接字耗尽后可能出现这样的异常:System.Net.Sockets.SocketException!

因此分类算法应用范围非常广泛,我们来看下在tensorflow中如何解决这个分类问题的。
本文用经典的手写数字识别作为案例进行讲解。

4.
任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类。

改进后的程序(单例或者静态化的HttpClient)

   readonly static HttpClient http = new HttpClient(new HttpClientHandler()
        {
            AutomaticDecompression = System.Net.DecompressionMethods.GZip
        });
        [TestMethod]
        public void Get()
        {
            Stopwatch sw = new Stopwatch();
            sw.Restart();
            for (int i = 0; i < 1000; i++)
            {
                var response = http.GetAsync("http://www.sina.com").Result;
            }
            sw.Stop();
            Console.WriteLine("1000个请求的时间" + sw.ElapsedMilliseconds);
        }

修改之后,我们可以看到整个HttpClient的测试性能有了明显的提升!

澳门微尼斯人手机版 2

对于控制台输出的TCP连接情况,我们也只看到一条相关的数据,这也是我们希望看到的!

netstat -nbp | findstr 202.108.33.107

结果

澳门微尼斯人手机版 3

最后,感谢Infoq的编辑“谢丽”找了这么好的一篇文章,辛苦了!

回到目录

准备数据

# 准备数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('D:/todel/python/MNIST_data/', one_hot=True)

执行上述代码后,会从线上下载测试的手写数字的数据。
不过在我的机器上运行时好久都没有下载下相应的数据,最后我就直接到
网站上下载其中的训练数据和测试数据文件到指定的目录下,然后再运行这个程序就能把数据给解压开来。
澳门微尼斯人手机版 4

这里总共大概有6万个训练数据,1万个测试数据。

手写数字是一堆28X28像素的黑白图片,例如:
澳门微尼斯人手机版 5

在本次案例中,我们把这个数组展开成一个向量,长度是 28×28 =
784,也就是一个图片就是一行784列的数据,每列中的值是一个像素的灰度值,0-255。
为何要把图像的二维数组转换成一维数组?
把图像的二维数组转换成一维数组一定是把图像中的某些信息给丢弃掉了,但目前本文的案例中也可以用一维数组来进行分类,这个就是深度神经网络的强大之处,它会尽力寻找一堆数据中隐藏的规律。
以后我们会用卷积神经网络来处理这个图像的分类,那时的精确度就能再次进行提高。
但是即便把此图像数据碾平成一维数据的方式也能有一个较好的分辨率。

另外这里有一个关于分类问题的重要概念就是one
hot数据,虽然我们对每个图片要打上的标签是0-9数字,但在分类中用一个总共有10个占位分类的数字来表示,如果属于哪个类就在那个位置设置为1,其它位置为0.
例如:
标签0将表示成([1,0,0,0,0,0,0,0,0,0,0])
标签2将表示成([0,0,1,0,0,0,0,0,0,0,0])
这样结果集其实是一个10列的数据,每列的值为0或1。

5.
抽象成员只能申明在抽象类中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注