TF Learn : 基于Scikit-learn和TensorFlow的深度学习利器

栏目: 编程工具 · 发布时间: 6年前

内容简介:【51CTO.com快译】了解国外数据科学市场的人都知道,2017年海外数据科学最常用的三项技术是 Spark ,Python 和 MongoDB 。说到 Python ,做大数据的人都不会对 Scikit-learn 和 Pandas 感到陌生。Scikit-learn 是最常用的 Python 机器学习框架,在各大互联网公司做算法的工程师在实现单机版本的算法的时候或多或少都会用到 Scikit-learn 。TensorFlow 就更是大名鼎鼎,做深度学习的人都不可能不知道 TensorFlow。

TF Learn : 基于Scikit-learn和TensorFlow的深度学习利器

【51CTO.com快译】了解国外数据科学市场的人都知道,2017年海外数据科学最常用的三项技术是 Spark ,Python 和 MongoDB 。说到 Python ,做大数据的人都不会对 Scikit-learn 和 Pandas 感到陌生。

Scikit-learn 是最常用的 Python 机器学习框架,在各大互联网公司做算法的工程师在实现单机版本的算法的时候或多或少都会用到 Scikit-learn 。TensorFlow 就更是大名鼎鼎,做深度学习的人都不可能不知道 TensorFlow。

下面我们先来看一段样例,这段样例是传统的机器学习算法逻辑回归的实现:

TF Learn : 基于Scikit-learn和TensorFlow的深度学习利器

可以看到,样例中仅仅使用了 3 行代码就完成了逻辑回归的主要功能。下面我们来看一下如果用 TensorFlow 来实现同样的代码,需要多少行?下面的代码来自 GitHub :

'''  
A logistic regression learning algorithm example using TensorFlow library.  
This example is using the MNIST database of handwritten digits  
(http://yann.lecun.com/exdb/mnist/)  
Author: Aymeric Damien  
Project: https://github.com/aymericdamien/TensorFlow-Examples/  
'''  
from __future__ import print_function  
import tensorflow as tf  
# Import MNIST data  
from tensorflow.examples.tutorials.mnist import input_data  
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)  
 
# Parameters  
learning_rate = 0.01  
training_epochs = 25  
batch_size = 100  
display_step = 1  
 
# tf Graph Input  
x = tf.placeholder(tf.float32, [None, 784]) # mnist data image of shape 28*28=784  
y = tf.placeholder(tf.float32, [None, 10]) # 0-9 digits recognition => 10 classes  
 
# Set model weights  
W = tf.Variable(tf.zeros([784, 10]))  
b = tf.Variable(tf.zeros([10]))  
 
# Construct model  
pred = tf.nn.softmax(tf.matmul(x, W) + b) # Softmax  
 
# Minimize error using cross entropy  
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))  
# Gradient Descent  
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)  
 
# Initialize the variables (i.e. assign their default value)  
init = tf.global_variables_initializer()  
 
# Start training  
with tf.Session() as sess:  
    # Run the initializer  
    sess.run(init)  
    # Training cycle  
    for epoch in range(training_epochs):  
        avg_cost = 0.  
        total_batch = int(mnist.train.num_examples/batch_size)  
        # Loop over all batches  
        for i in range(total_batch):  
            batch_xs, batch_ys = mnist.train.next_batch(batch_size)  
            # Run optimization op (backprop) and cost op (to get loss value)  
            _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs,  
                                                          y: batch_ys})  
            # Compute average loss  
            avg_cost += c / total_batch  
        # Display logs per epoch step  
        if (epoch+1) % display_step == 0:  
            print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost))  
 
    print("Optimization Finished!")  
 
    # Test model  
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))  
    # Calculate accuracy  
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))  
print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})) 

一个相对来说比较简单的机器学习算法,用 Tensorflow 来实现却花费了大量的篇幅。然而 Scikit-learn 本身没有 Tensorflow 那样丰富的深度学习的功能。有没有什么办法,能够在保证 Scikit-learn 的简单易用性的前提下,能够让 Scikit-learn 像 Tensorflow 那样支持深度学习呢?答案是有的,那就是 Scikit-Flow 开源项目。该项目后来被集成到了 Tensorflow 项目里,变成了现在的 TF Learn 模块。

我们来看一个 TF Learn 实现线性回归的样例:

""" Linear Regression Example """ 
from __future__ import absolute_import, division, print_function  
import tflearn  
# Regression data  
X = [3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1]  
Y = [1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,2.827,3.465,1.65,2.904,2.42,2.94,1.3]  
# Linear Regression graph  
input_ = tflearn.input_data(shape=[None])  
linear = tflearn.single_unit(input_)  
regression = tflearn.regression(linear, optimizer='sgd', loss='mean_square',  
                                metric='R2', learning_rate=0.01)  
m = tflearn.DNN(regression)  
m.fit(X, Y, n_epoch=1000, show_metric=True, snapshot_epoch=False)  
print("\nRegression result:")  
print("Y = " + str(m.get_weights(linear.W)) +  
      "*X + " + str(m.get_weights(linear.b)))  
 
print("\nTest prediction for x = 3.2, 3.3, 3.4:")  
print(m.predict([3.2, 3.3, 3.4])) 

我们可以看到,TF Learn 继承了 Scikit-Learn 的简洁编程风格,在处理传统的机器学习方法的时候非常的方便。下面我们看一段 TF Learn 实现 CNN (MNIST数据集)的样例:

""" Convolutional Neural Network for MNIST dataset classification task.  
References:  
    Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. "Gradient-based  
    learning applied to document recognition." Proceedings of the IEEE,  
    86(11):2278-2324, November 1998.  
Links:  
    [MNIST Dataset] http://yann.lecun.com/exdb/mnist/  
"""  
 
from __future__ import division, print_function, absolute_import   
import tflearn  
from tflearn.layers.core import input_data, dropout, fully_connected  
from tflearn.layers.conv import conv_2d, max_pool_2d  
from tflearn.layers.normalization import local_response_normalization  
from tflearn.layers.estimator import regression  
 
# Data loading and preprocessing  
import tflearn.datasets.mnist as mnist  
X, Y, testX, testY = mnist.load_data(one_hot=True)  
X = X.reshape([-1, 28, 28, 1])  
testX = testX.reshape([-1, 28, 28, 1])  
# Building convolutional network  
network = input_data(shape=[None, 28, 28, 1], name='input')  
network = conv_2d(network, 32, 3, activation='relu', regularizer="L2")  
network = max_pool_2d(network, 2)  
network = local_response_normalization(network)  
network = conv_2d(network, 64, 3, activation='relu', regularizer="L2")  
network = max_pool_2d(network, 2)  
network = local_response_normalization(network)  
network = fully_connected(network, 128, activation='tanh')  
network = dropout(network, 0.8)  
network = fully_connected(network, 256, activation='tanh')  
network = dropout(network, 0.8)  
network = fully_connected(network, 10, activation='softmax') 
network = regression(network, optimizer='adam', learning_rate=0.01,  
                     loss='categorical_crossentropy', name='target')  
 
# Training  
model = tflearn.DNN(network, tensorboard_verbose=0)  
model.fit({'input': X}, {'target': Y}, n_epoch=20,  
           validation_set=({'input': testX}, {'target': testY}),  
snapshot_step=100, show_metric=True, run_id='convnet_mnist') 

可以看到,基于 TF Learn 的深度学习代码也是非常的简洁。

TF Learn 是 TensorFlow 的高层次类 Scikit-Learn 封装,提供了原生版 TensorFlow 和 Scikit-Learn 之外的又一种选择。对于熟悉了 Scikit-Learn 和厌倦了 TensorFlow 冗长代码的用户来说,不啻为一种福音,也值得机器学习和数据挖掘的从业者认真学习和掌握。

TF Learn : 基于Scikit-learn和TensorFlow的深度学习利器

汪昊,恒昌利通大数据部负责人/资深架构师,美国犹他大学本科/硕士,对外经贸大学在职MBA。曾在百度,新浪,网易,豆瓣等公司有多年的研发和技术管理经验,擅长机器学习,大数据,推荐系统,社交网络分析等技术。在 TVCG 和 ASONAM 等国际会议和期刊发表论文 8 篇。本科毕业论文获国际会议 IEEE SMI 2008 最佳论文奖。

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品故事地图

产品故事地图

唐娜·理查(Donna Lichaw) / 向振东 / 机械工业出版社 / 2017-6 / 49.9元

本书一共8章,分为三个部分:第1-2章讲述故事的作用、你该如何运用产品故事来吸引顾客,不是通过讲故事,而是创造故事。第3-5章阐述了不同情境和客户生命周期中的产品故事类型。第6-8章进一步研究如何在战略和策略层面发现、提升、用好你的产品故事。 《产品故事地图》写给那些想要通过创造出顾客喜欢用、经常用而且会推荐给别人用的产品来吸引客户的人。这里的“产品”包括网页、软件、APP、数字化或非数字化......一起来看看 《产品故事地图》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码