TensorFlow实战之Scikit Flow系列指导:Part 2

news/2024/7/4 9:30:23

原文地址:这里

本部分我们将继续深入并且尝试构建多层全连接的神经网络,并且自定义网络模型并在此基础上尝试卷积网络。

Multi-layer fully connected neural network

当然,这里并没有太多关于其他的线性/Logistic拟合的框架。TensorFlow一个基础的理念就是希望能够将模型的不同的部分连接并且使用相关的代价函数去进行参数优化。Scikit Flow已经提供了非常便捷的封装以供创建多层全连接单元,因此只需要简单地将分类器替换为TensorFlowDNNClassifier然后指定它的各个参数,就可以进行相应的训练与预测。

>>> classifier = skflow.TensorFlowDNNClassifier(
...     hidden_units=[10, 20, 10], 
...     n_classes=2, 
...     batch_size=128, 
...     steps=500, 
...     learning_rate=0.05)
>>> classifier.fit(X_train, y_train)
>>> score = accuracy_score(classifier.predict(X_test), y_test)
>>> print("Accuracy: %f" % score)
Accuracy: 0.67597765363

上述程序会用10,20以及10个独立的隐藏单元创建一个3层的全连接网络,并且使用默认的Rectified激活函数。关于这个激活函数的自定义将会在下面讲到。

模型中的参数有一个示例,但是在实际的应用中,学习速率、优化器以及训练步长的不同可能会导致结果有很大的差异性。一般情况下,我们会使用类似于超参数搜索的方法来寻找一个最优的组合。

Multi-layer with tanh activation

笔者并没有进行太多的参数搜索,但是之前的DNN模型确实抛出了一个比Logistic回归还要差的结果。可能这是因为过拟合或者欠拟合的情形。

为了解决这个问题,笔者打算将上文中用的DNN模型转化为自定义的模型:

>>> def dnn_tanh(X, y):
...    layers = skflow.ops.dnn(X, [10, 20, 10], tf.tanh)
...    return skflow.ops.logistic_classifier(layers, y)

>>> classifier = skflow.TensorFlowEstimator(
...     model_fn=dnn_tanh, 
...     n_classes=2,
...     batch_size=128,
...     steps=500,
...     learning_rate=0.05)
>>> classifier.fit(X_train, y_train)
>>> score = accuracy_score(classifier.predict(X_test), y_test)
>>> print("Accuracy: %f" % score)
Accuracy: 0.692737430168

这个模型很类似之前那个,但是我们将激活方程从线性整流变成了双曲正切。正如你所见,创建一个自定义的模型还是很简答的,就是输入X与y这两个Tensors,然后返回prediction与loss这两个Tensor。

Digit recognition

TensorFlow的教程当中自然应该包含一波数字识别的测试:

import random
from sklearn import datasets, cross_validation, metrics
import tensorflow as tf

import skflow

random.seed(42)

# Load dataset and split it into train / test subsets.

digits = datasets.load_digits()
X = digits.images
y = digits.target

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y,
    test_size=0.2, random_state=42)

# TensorFlow model using Scikit Flow ops

def conv_model(X, y):
    X = tf.expand_dims(X, 3)
    features = tf.reduce_max(skflow.ops.conv2d(X, 12, [3, 3]), [1, 2])
    features = tf.reshape(features, [-1, 12])
    return skflow.models.logistic_regression(features, y)

# Create a classifier, train and predict.
classifier = skflow.TensorFlowEstimator(model_fn=conv_model, n_classes=10,
                                        steps=500, learning_rate=0.05,
                                        batch_size=128)
classifier.fit(X_train, y_train)
score = metrics.accuracy_score(classifier.predict(X_test), y_test)
print('Accuracy: %f' % score)

我们自定义了con_model函数,使用Tensor X以及y作为参数,使用最大化池来创建一个二维的卷积层。这个层的结果作为参数传给了logistic拟合,在其中将会来处理具体的分类问题。我们只需要按照自身的需求来添加不同的层即可以完成一些复杂的图片识别或者其他处理操作。


http://www.niftyadmin.cn/n/4640335.html

相关文章

quad 和 plane 区别是什么?

Quad就是两个三角形组成四边形,Plane会有很多三角形,哦也 貌似Quad拖上去后看不见,很薄的感觉

Oracle使用杂记

2019独角兽企业重金招聘Python工程师标准>>> 1)首先安装oracle网上应该有好多文档,这就不说了。安装过程经常忘记创建用户, 我们可以使用默认创建好的用户 system 来进行登录,然后在创建其他的用户。(小菜我…

实现部分库函数

1.模拟实现strncat//与strcat无异,只是追加的块大小不一样,strncat只是向后追加n个字节的内容char *my_strncat(char * dst, const char *src,int count){char *p dst;while (*dst){dst;}while (count--) // 用数count控制循环的次数*dst *src;}…

修改 linux 默认启动级别 设置系统时间   定时关机

1、设置系统时间 为 2016 -1-1 11:11date -s "2016-1-1 11:11" 2、显示时间 为 2016 -1-1 11:11date "%F %H:%M" 3、设置一小时后自动关机 取消为 -cshutdown -h 60 -tsec : -t 后面加秒数…

关于什么是句柄(经典)

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到&a…

微信初始

2019独角兽企业重金招聘Python工程师标准>>> 1. 使用wechat-php-sdk,配置多次后发现,不能将微信公众平台url地址设为: http://xxxxx/index.php 2. php 读取数据库 要加一句 mysql_query("SET NAMES utf8"); 3. 使用微擎阿里云配…

企业加密系统应用综述之常用的加密算法介绍

常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。对称加密指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则…

密钥或对称密钥加密术

密钥或对称密钥加密术(Secret-Key or Symmetric-Key Cryptography) 密钥加密术是确保具有报文解密密钥的受限方对信息公开的网络技术安全技术。在密钥加密模式中,只需要提供一种密钥进行加、解密过程。它又叫作对称密钥加密。“非对称密钥加密…