3.2.4Tensorflow框架

作者: idatadesign | 来源:发表于2017-12-05 21:37 被阅读44次

Tensorflow是一个完整的编码框架。就如同我们按照python编程语法设计程序一样。Tensorflow内部也有自己所定义的常量、变量、数据操作等要素。不同的是,Tensorflow使用来表示计算任务;并使用会话来执行图。

使用Tensorflow输出一句话
import tensorflow as tf
import numpy as np

#初始化一个Tensorflow的常量:Hello Google Tensorflow!字符串,并命名为greeting作为一个计算模块。
greeting=tf.constant('Hello Google Tensorflow!')

#启动一个会话
sess=tf.Session()
#使用会话执行greeting计算模块
result=sess.run(greeting)
#输出会话执行的结果
print(result)
#关闭会话。这是一种显式关闭会话的方式
sess.close()

b'Hello Google Tensorflow!'

使用Tensorflow完成一次线性函数的计算
#声明matrix1为Tensorflow的一个1*2的行向量
matrix1=tf.constant([[3.,3.]])
#声明matrix2为Tensorflow的一个2*1的列向量
matrix2=tf.constant([[2.],[2.]])

#product将上述两个算子相乘,作为新算例
product=tf.matmul(matrix1,matrix2)

#继续将product与一个标量2.0求和拼接,作为最终的linear算例
linear=tf.add(product,tf.constant(2.0))

#直接在会话中执行linear算例,相当于将上面所有单独算例拼接成流程图来执行
with tf.Session() as sess:
    result=sess.run(linear)
    print(result)

[[ 14.]]

虽然上述代码可以说明Tensorflow是一个变成框架,但是截至目前还没有显示出其机器学习的能力。那么接下来的代码将要向各位读者展示如何利用Tensorflow自行搭建一个线性分类器。与直接使用Scikit-learn中已经编写好的LogiticRegression模型不同,Tensorflow允许使用者自由选取不同操作,并组织一个学习系统。这里我们对所要使用的线性分类器做一个简化:取0.5(良性肿瘤为0,恶性肿瘤为1)为界,并采用最小二乘法拟合模型参数。

使用Tensorflow自定义一个线性分类器用于“良/恶性乳腺癌肿瘤”进行预测
import tensorflow as tf
import numpy as np
import pandas as pd

train=pd.read_csv('/Users/daqi/Documents/Python机器学习及实践/Datasets/Breast-Cancer/breast-cancer-train.csv')
test=pd.read_csv('/Users/daqi/Documents/Python机器学习及实践/Datasets/Breast-Cancer/breast-cancer-test.csv')

#分隔特征与分类目标
X_train=np.float32(train[['Clump Thickness','Cell Size']].T)
y_train=np.float32(train['Type'].T)
X_test=np.float32(train[['Clump Thickness','Cell Size']].T)
y_test=np.float32(train['Type'].T)

#定义一个tensorflow的变量b作为线性模型的截距,同时设置初始值为1.0。
b=tf.Variable(tf.zeros([1]))
#定义一个tensorflow的变量W作为线性模型的系数,并设置初始值为-1.0至1.0之间均匀分布的随机数。
W=tf.Variable(tf.random_uniform([1,2],-1.0,1.0))

#显式定义这个线性函数
y=tf.matmul(W,X_train)+b

#使用tensorflow中的reduce_mean取得训练集上均方误差
loss=tf.reduce_mean(tf.square(y-y_train))

#使用梯度下降法估计参数W,b,并且设置迭代步长为0.01,这个与scikit-learn中的SGDRegressor类似
optimizer=tf.train.GradientDescentOptimizer(0.01)

#以最小二乘损失为优化目标
train=optimizer.minimize(loss)

#初始化所有变量
init=tf.initialize_all_variables()

#开启Tensorflow中的会话
sess=tf.Session()

#执行变量初始化操作
sess.run(init)

#迭代1000轮次,训练参数
for step in range(0,1000):
    sess.run(train)
    if step %200==0:
        print(step,sess.run(W),sess.run(b))

0 [[-0.23830706 0.59195495]] [-0.0683303]
200 [[ 0.03732548 0.09953798]] [-0.09818262]
400 [[ 0.05677485 0.07890751]] [-0.08934592]
600 [[ 0.05779386 0.07756446]] [-0.087328]
800 [[ 0.05785419 0.07744326]] [-0.08696128]

#准备测试样本
test_negative=test.loc[test['Type']==0][['Clump Thickness','Cell Size']]
test_positive=test.loc[test['Type']==1][['Clump Thickness','Cell Size']]

#以最终更新的参数
import matplotlib.pyplot as plt

plt.scatter(test_negative['Clump Thickness'],test_negative['Cell Size'],marker='o',s=200,c='red')
plt.scatter(test_positive['Clump Thickness'],test_positive['Cell Size'],marker='x',s=150,c='black')

plt.xlabel('Clump Thickness')
plt.ylabel('Cell Size')

lx=np.arange(0,12)

#这里强调下,我们以0.5作为分界面,所以计算方式如下
ly=(0.5-sess.run(b)-lx*sess.run(W)[0][0])/sess.run(W)[0][1]

plt.plot(lx,ly,color='green')
plt.show()

skflow非常适合于熟悉Scikit-learn编程接口(API)的使用者,而且利用Tensorflow的运算架构和模块封装了许多经典的机器学习模型,如线性回归器、深度全连接的神经网络(DNN)等。

使用skflow内置的LogiticRegression、DNN、Scikit-learn中的集成回归模型对“美国波士顿房价”数据进行回归预测
from sklearn import datasets,metrics,preprocessing,cross_validation

boston=datasets.load_boston()

#获取房屋数据特征以及对应房价
X,y=boston.data,boston.target

#分割数据,随机采样25%作为测试样本
X_train,X_test,y_train,y_test=cross_validation.train_test_split(X,y,test_size=0.25,random_state=33)

#对数据特征进行标准化处理。
scaler=preprocessing.StandardScaler()
X_train=scaler.fit_transform(X_train)
X_test=scaler.transform(X_test)

import skflow

#使用skflow的LinearRegressor。
tf_lr=skflow.TensorFlowLinearRegressor(steps=10000,learning_rate=0.01,batch_size=50)
tf_lr.fit(X_train,y_train)
tf_lr_y_predict=tf_lr.predict(X_test)

#输出skflow中的LinearRegressor模型的回归性能。
print('The mean absolute error of Tensorflow Linear Regressor on boston dataset is',metrics.mean_absolute_error(tf_lr_y_predict,y_test))
print('The mean squared error of Tensorflow Linear Regressor on boston dataset is',metrics.mean_squared_error(tf_lr_y_predict,y_test))
print('The mean R-squared error of Tensorflow Linear Regressor on boston dataset is',metrics.r2_score(tf_lr_y_predict,y_test))

The mean absolute error of Tensorflow Linear Regressor on boston dataset is 20.6774992764
The mean squared error of Tensorflow Linear Regressor on boston dataset is 458.29343764
The mean R-squared error of Tensorflow Linear Regressor on boston dataset is -11.3519662471

#使用skflow的DNNRegressor,并且注意其每个隐层特征数量的配置。
tf_dnn_regressor=skflow.TensorFlowDNNRegressor(hidden_units=[100,40],steps=10000,learning_rate=0.01,batch_size=50)
tf_dnn_regressor.fit(X_train,y_train)
tf_dnn_regressor_y_predict=tf_dnn_regressor.predict(X_test)

#输出skflow中的DNNRegressor模型的回归性能。
print('The mean absolute error of Tensorflow DNN Regressor on boston dataset is',metrics.mean_absolute_error(tf_dnn_regressor_y_predict,y_test))
print('The mean squared error of Tensorflow DNN Regressor on boston dataset is',metrics.mean_squared_error(tf_dnn_regressor_y_predict,y_test))
print('The mean R-squared error of Tensorflow DNN Regressor on boston dataset is',metrics.r2_score(tf_dnn_regressor_y_predict,y_test))

The mean absolute error of Tensorflow DNN Regressor on boston dataset is 2.4622086127
The mean squared error of Tensorflow DNN Regressor on boston dataset is 18.2267462678
The mean R-squared error of Tensorflow DNN Regressor on boston dataset is 0.750988158261

from sklearn.ensemble import RandomForestRegressor
rfr=RandomForestRegressor()
rfr.fit(X_train,y_train)
rfr_y_predict=rfr.predict(X_test)

#输出skflow中的DNNRegressor模型的回归性能。
print('The mean absolute error of Tensorflow Random Forest Regressor on boston dataset is',metrics.mean_absolute_error(rfr_y_predict,y_test))
print('The mean squared error of Tensorflow Random Forest Regressor on boston dataset is',metrics.mean_squared_error(rfr_y_predict,y_test))
print('The mean R-squared error of Tensorflow Random Forest Regressor on boston dataset is',metrics.r2_score(rfr_y_predict,y_test))

The mean absolute error of Tensorflow Random Forest Regressor on boston dataset is 2.47141732283
The mean squared error of Tensorflow Random Forest Regressor on boston dataset is 15.2839866142
The mean R-squared error of Tensorflow Random Forest Regressor on boston dataset is 0.786460063124

通过输出结果,可以对比发现深度神经网络的确可以表现出更高的性能。但是,越是具备描述复杂数据的强力模型,越容易在训练时陷入过拟合。这一点,请读者在配置DNN的层数和每层特征元的数量时要特别注意。

相关文章

  • 3.2.4Tensorflow框架

    Tensorflow是一个完整的编码框架。就如同我们按照python编程语法设计程序一样。Tensorflow内部...

  • Android 中常用的框架集合

    常用框架 常用框架 常用框架 常用框架 常用框架 常用框架 常用框架 UI框架 感谢以上链接博主大佬的奉献。

  • 全脑表达笔记

    左脑逻辑 6个框架:时间框架、空间框架、支点框架、钟摆框架、变焦框架、递推框架。 右脑感性 6个力量:对比力量,视...

  • thinkphp安装

    php框架 TP3.2框架 laravel框架 Yii框架 TP5.0框架 thinkphp框架简介 免费开源 T...

  • SSM 框架快速整合实例--学生查询

    一、快速准备 SSM 框架即 Spring 框架、SpringMVC 框架、MyBatis 框架,关于这几个框架的...

  • 多媒体笔记 | 框架流程

    一、整体框架 二、MediaPlayer框架 三、相机框架 四、录像框架 五、Video Camera框架 六、O...

  • 1.Mybatis-01 框架概述,Mybatis 框架快速入门

    主要内容 框架概述 Mybatis 框架快速入门 1.1 什么是框架 1.1.1 什么是框架 框架( Framew...

  • 20170602基础知识-语法基础、运算符

    1、import引入框架, Foundation框架是基础框架 macOS框架:Foundation、AppKit...

  • iOS-基本技术总结

    1、基本框架:Foundation框架、UIKit框架 2、高级框架:Core Data 、Core Graphi...

  • 框架的入口分析

    一、如何了解框架 1、先要找到框架的入口? 框架的初始化就是框架的入口。框架是怎么开始进行初始化的,框架...

网友评论

    本文标题:3.2.4Tensorflow框架

    本文链接:https://www.haomeiwen.com/subject/oddfixtx.html