TensorFlow实战

深度学习定义

人工智能,机器学习,深度学习这三个概念还傻傻分不清?

一张图解决疑惑

神经网络和深度学习差别?
深度学习是一种学习方式,指的是采用深度模型进行学习,不是模型。多层神经网络是一种模型。
神经网络只要足够深就可以称作深度模型,但是深度模型不仅仅只有多层网络。

神经网络部分概念

特征值
人和计算机互补(人,直觉,驾车,图像识别,计算机,简单机械)
特征值提取的好坏(直角坐标与极坐标举例)
举例:工厂:尺子质量和长度,邮件:收件人长度,收件人数量,广告词
传统的机器学习和深度学习最大的不在于,传统的机器学习是简单的人工提取特征值。
深度学习是多层复杂的特征提取。
维度
升维:线性区分,高维度空间可用区分低维度不可分。
降维:特征值太多,无法学习,只需要提取最重要的特征值(无关特征,相关性太高的特征)。
矩阵计算
不满足交换律,满足结合律,分配率。

简单的神经网络演示

结合特征值,维度

Stanford convnetjs

Google playgroud

TensorFlow初步

Scikit-learn比较
1.sklearn是一个完整的机器学习流程框架,提供了完整的特征工程工具,实现了很多经典机器学习算法,如线性回归、决策树、各种Boost、SVM、神经网络,并封装成为类库模块,运行于CPU,最后还有交叉验证等评估工具。
2.而TensorFlow就如同乐高积木一般 ,可以自己组装张量运算图以及自动求导,你完全把张量运算拼装起来,然后规定优化目标,进行训练。可以高效实现卷积运算、批标准化、在不同范数实现正则化、自动求解梯度、梯度下降/截断等功能,这些功能都是近年神经网络应用突飞猛进的必备。
安装
1.pip,源码方式,较为麻烦,网上有相关教程,注意GPU和CPU的选择。

2.docker方式, 推荐, 一条命令解决.
sudo docker pull registry.cn-hangzhou.aliyuncs.com/chenyu139/chenyu:0.0.2
sudo docker run -it -p 8888:8888 -p 6006:6006 0660b741e6a9
张量
TensorFlow两个重要概念:Tensor和Flow,Tensor就是张量(可以理解为多维数组),Flow就是计算相互转化的过程。TensorFlow的计算方式类似Spark的有向无环图(DAG),在创建Session之后才开始计算(类似Action算子)。
import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([3.0,4.0],name="b")
result = a + b
print(result)
# Tensor("add_1:0", shape=(2,), dtype=float32)
会话

import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([3.0,4.0],name="b")
result = a + b
with tf.Session() as sess:
    # 两种方式计算张量的取值
    print(sess.run(result))
    print(result.eval(session=sess))
变量
# 声明一个2 * 3 的矩阵变量,矩阵均值为0,标准差为2的随机数
import tensorflow as tf
weights = tf.Variable(tf.random_normal([2,3],stddev=2))
# 初始化变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(weights))
前向传播结构图

这里写图片描述

这里写图片描述

import tensorflow as tf

x = tf.constant([[0.7,0.9]])
w = tf.random_normal([2,3])
y = tf.matmul(x,w)

with tf.Session() as sess:   
    print (sess.run(w))
    print (sess.run(y))
反向训练

这里写图片描述
损失函数:分类问题(交叉熵), 回归问题(均方误差)
梯度下降:凸函数,可能无法全局最优

两个完整运行例子实战分析(套路) 

import tensorflow as tf
from numpy.random import RandomState

# 定义训练数据batch的大小
batch_size = 8

# 定义神经网络的参数
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))

# 在shape的一个维度上使用None可以方便使用不同的batch大小
x = tf.placeholder(tf.float32,shape=(None,2),name='x-input')
y_ = tf.placeholder(tf.float32,shape=(None,1),name='y-input')

# 定义神经网络前向传播的过程
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)

# 定义损失函数和反向传播算法
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y,1e-10,1.0)))
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy)

# 通过随机数生成一个模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size,2)

# 定义规则来给出样本的标签,x1+x2<1的样例都被认为是正样本,其他为负样本,0:负样本,1:正样本
Y = [[int(x1+x2<1)] for (x1,x2) in X]
# 创建一个会话来运行TensorFlow程序
with tf.Session() as sess:
    # 初始化变量
    init_op = tf.global_variables_initializer()
    sess.run(init_op)

    print(sess.run(w1))
    print(sess.run(w2))

    # 设定训练的轮数
    STEPS = 5000

    for i in range(STEPS):
        # 每次选取batch_size 个样本进行训练
        start = (i * batch_size)% dataset_size
        end = min(start+batch_size,dataset_size)

        # 通过选取的样本训练神经网络并更新参数
        sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})
        if i % 1000 == 0:
            total_cross_entropy = sess.run(cross_entropy,feed_dict={x:X,y_:Y})
            print("After %d trainint step(s),cross entropy on all data is %g" % (i,total_cross_entropy))

    print(sess.run(w1))
    print(sess.run(w2))



import tensorflow as tf
import numpy
import matplotlib.pyplot as plt
rng = numpy.random

# 初始化参数
learning_rate = 0.01
training_epochs = 2000
display_step = 50

# T随机数据
train_X = numpy.asarray([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])
train_Y = numpy.asarray([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])
n_samples = train_X.shape[0]


# 套路开始
X = tf.placeholder("float")
Y = tf.placeholder("float")




W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")


activation = tf.add(tf.mul(X, W), b)

# 定义cost,优化器
cost = tf.reduce_sum(tf.pow(activation-Y, 2))/(n_samples) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

# 初始化变量
init = tf.global_variables_initializer()

# 套路
with tf.Session() as sess:
    sess.run(init)

    # 开始训练
    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:
            print "Epoch:", '%04d' % (epoch+1), "cost=", \
                "{:.9f}".format(sess.run(cost, feed_dict={X: train_X, Y:train_Y})), \
                "W=", sess.run(W), "b=", sess.run(b)

    print "Optimization Finished!"
    print "cost=", 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='Fitted line')
    plt.legend()
    plt.show()



神经网络优化

矩阵的乘法永远是线性(激活函数)
过度拟合(正则化)
学习率动态调整
TensorFlow是一个开源的机器学习框架,广泛应用于深度学习领域。想要进行TensorFlow实战,首先需要了解TensorFlow的基本概念和原理。TensorFlow的核心概念是张量(tensor)、计算图(computational graph)和会话(session)。张量是多维数组,是TensorFlow中的数据基本单元。计算图是由节点和边构成的图结构,表示了数据的流动和计算的过程。会话则是执行计算图的运行环境。 接着,进行TensorFlow实战的步骤包括数据准备、模型构建、模型训练和模型评估。在数据准备阶段,需要对数据进行清洗、标准化等预处理操作;在模型构建阶段,需要选择合适的模型结构,并利用TensorFlow的API构建相应的计算图;在模型训练阶段,需要选择合适的优化算法和损失函数,然后通过反向传播等技术来不断调整模型参数,使模型能够更好地拟合数据;最后,在模型评估阶段,可以利用测试集来评估模型的性能,并根据评估结果对模型进行调优。 进行TensorFlow实战的过程中,还可以利用TensorBoard来可视化模型训练过程中的各项指标,以及模型结构等信息,帮助更好地理解模型的运行情况。同时,可以利用TensorFlow Serving来部署训练好的模型,实现模型的在线预测功能。 总的来说,进行TensorFlow实战需要对TensorFlow的基本原理有一定的了解,同时需要熟练掌握TensorFlow的API和工具,通过实际操作来深入理解和掌握TensorFlow的应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值