0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习笔记8:利用Tensorflow搭建神经网络

人工智能实训营 2018-08-24 18:31 次阅读

在笔记7中,和大家一起入门了 Tensorflow 的基本语法,并举了一些实际的例子进行了说明,终于告别了使用 numpy 手动搭建的日子。所以我们将继续往下走,看看如何利用 Tensorflow 搭建神经网络模型。

尽管对于初学者而言使用 Tensorflow 看起来并不那么习惯,需要各种步骤,但简单来说,Tensorflow 搭建模型实际就是两个过程:创建计算图和执行计算图。在 deeplearningai 课程中,NG和他的课程组给我们提供了 Signs Dataset (手势)数据集,其中训练集包括1080张64x64像素的手势图片,并给定了 6 种标注,测试集包括120张64x64的手势图片,我们需要对训练集构建神经网络模型然后对测试集给出预测。

先来简单看一下数据集:

#LoadingthedatasetX_train_orig,Y_train_orig,X_test_orig,Y_test_orig,classes=load_dataset()#FlattenthetrainingandtestimagesX_train_flatten=X_train_orig.reshape(X_train_orig.shape[0],-1).T
X_test_flatten=X_test_orig.reshape(X_test_orig.shape[0],-1).T#NormalizeimagevectorsX_train=X_train_flatten/255.X_test=X_test_flatten/255.#ConverttrainingandtestlabelstoonehotmatricesY_train=convert_to_one_hot(Y_train_orig,6)
Y_test=convert_to_one_hot(Y_test_orig,6)print("numberoftrainingexamples="+str(X_train.shape[1]))print("numberoftestexamples="+str(X_test.shape[1]))print("X_trainshape:"+str(X_train.shape))print("Y_trainshape:"+str(Y_train.shape))print("X_testshape:"+str(X_test.shape))print("Y_testshape:"+str(Y_test.shape))

640?wx_fmt=png

下面就根据 NG 给定的找个数据集利用 Tensorflow 搭建神经网络模型。我们选择构建一个包含 2 个隐层的神经网络,网络结构大致如下:
LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX
正如我们之前利用
numpy 手动搭建一样,搭建一个神经网络的主要步骤如下:
-定义网络结构
-初始化模型参数
-执行前向计算/计算当前损失/执行反向传播/权值更新

创建 placeholder

根据 Tensorflow 的语法,我们首先创建输入X 和输出 Y 的占位符变量,这里需要注意 shape 参数的设置。

def create_placeholders(n_x, n_y):
  X = tf.placeholder(tf.float32, shape=(n_x, None), name='X')
  Y = tf.placeholder(tf.float32, shape=(n_y, None), name='Y')  
return X, Y
初始化模型参数

其次就是初始化神经网络的模型参数,三层网络包括六个参数,这里我们采用Xavier初始化方法:

def initialize_parameters(): 
  tf.set_random_seed(1)         
  W1 = tf.get_variable("W1", [25, 12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b1 = tf.get_variable("b1", [25, 1], initializer = tf.zeros_initializer())
  W2 = tf.get_variable("W2", [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b2 = tf.get_variable("b2", [12, 1], initializer = tf.zeros_initializer())
  W3 = tf.get_variable("W3", [6, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
  b3 = tf.get_variable("b3", [6,1], initializer = tf.zeros_initializer())

  parameters = {"W1": W1,         
"b1": b1,
"W2": W2,
"b2": b2,
"W3": W3,
"b3": b3}
return parameters
执行前向传播
defforward_propagation(X,parameters):"""
Implementstheforwardpropagationforthemodel:LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX
"""

W1=parameters['W1']
b1=parameters['b1']
W2=parameters['W2']
b2=parameters['b2']
W3=parameters['W3']
b3=parameters['b3']

Z1=tf.add(tf.matmul(W1,X),b1)
A1=tf.nn.relu(Z1)
Z2=tf.add(tf.matmul(W2,A1),b2)
A2=tf.nn.relu(Z2)
Z3=tf.add(tf.matmul(W3,A2),b3)
returnZ3
计算损失函数

Tensorflow 中损失函数的计算要比手动搭建时方便很多,一行代码即可搞定:

def compute_cost(Z3, Y):
  logits = tf.transpose(Z3)
  labels = tf.transpose(Y)

  cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = labels))  
return cost
代码整合:执行反向传播和权值更新

跟计算损失函数类似,Tensorflow 中执行反向传播的梯度优化非常简便,两行代码即可搞定,定义完整的神经网络模型如下:

def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.0001,
     num_epochs = 1500, minibatch_size = 32, print_cost = True):
  ops.reset_default_graph()          
  tf.set_random_seed(1)             
  seed = 3                     
  (n_x, m) = X_train.shape            
  n_y = Y_train.shape[0]             
  costs = []                  

  # Create Placeholders of shape (n_x, n_y)
  X, Y = create_placeholders(n_x, n_y)  # Initialize parameters
  parameters = initialize_parameters()  # Forward propagation: Build the forward propagation in the tensorflow graph

  Z3 = forward_propagation(X, parameters)  # Cost function: Add cost function to tensorflow graph
  cost = compute_cost(Z3, Y)  # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.
  optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)  # Initialize all the variables
  init = tf.global_variables_initializer()  # Start the session to compute the tensorflow graph
  with tf.Session() as sess:    # Run the initialization
    sess.run(init)    # Do the training loop
    for epoch in range(num_epochs):
      epoch_cost = 0.          
      num_minibatches = int(m / minibatch_size) 
      seed = seed + 1
      minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)      
for minibatch in minibatches: # Select a minibatch (minibatch_X, minibatch_Y) = minibatch _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y}) epoch_cost += minibatch_cost / num_minibatches # Print the cost every epoch if print_cost == True and epoch % 100 == 0:
print ("Cost after epoch %i: %f" % (epoch, epoch_cost))
if print_cost == True and epoch % 5 == 0: costs.append(epoch_cost) # plot the cost plt.plot(np.squeeze(costs)) plt.ylabel('cost') plt.xlabel('iterations (per tens)') plt.title("Learning rate =" + str(learning_rate)) plt.show() # lets save the parameters in a variable parameters = sess.run(parameters)
print ("Parameters have been trained!") # Calculate the correct predictions correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y)) # Calculate accuracy on the test set accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print ("Train Accuracy:", accuracy.eval({X: X_train, Y: Y_train}))
print ("Test Accuracy:", accuracy.eval({X: X_test, Y: Y_test}))
return parameters

执行模型:

parameters=model(X_train,Y_train,X_test,Y_test)

640?wx_fmt=png

根据模型的训练误差和测试误差可以看到:模型整体效果虽然没有达到最佳,但基本也能达到预测效果。

总结
  • Tensorflow 语法中两个基本的对象类是 Tensor 和 Operator.

  • Tensorflow 执行计算的基本步骤为

    • 创建计算图(张量、变量和占位符变量等)

    • 创建会话

    • 初始化会话

    • 在计算图中执行会话

可以看到的是,在 Tensorflow 中编写神经网络要比我们手动搭建要方便的多,这也正是深度学习框架存在的意义之一。功能强大的深度学习框架能够帮助我们快速的搭建起复杂的神经网络模型,在经历了手动搭建神经网络的思维训练过程之后,这对于我们来说就不再困难了。

本文由《自兴动脑人工智能》项目部 凯文 投稿。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4762

    浏览量

    100535
  • 人工智能
    +关注

    关注

    1791

    文章

    46845

    浏览量

    237528
  • 机器学习
    +关注

    关注

    66

    文章

    8377

    浏览量

    132402
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120975
收藏 人收藏

    评论

    相关推荐

    卷积神经网络的实现工具与框架

    卷积神经网络因其在图像和视频处理任务中的卓越性能而广受欢迎。随着深度学习技术的快速发展,多种实现工具和框架应运而生,为研究人员和开发者提供了强大的支持。 TensorFlow 概述
    的头像 发表于 11-15 15:20 197次阅读

    深度学习中的卷积神经网络模型

    深度学习近年来在多个领域取得了显著的进展,尤其是在图像识别、语音识别和自然语言处理等方面。卷积神经网络作为深度学习的一个分支,因其在图像处理
    的头像 发表于 11-15 14:52 263次阅读

    利用TensorFlow实现基于深度神经网络的文本分类模型

    利用TensorFlow实现一个基于深度神经网络(DNN)的文本分类模型,我们首先需要明确几个关键步骤:数据预处理、模型构建、模型训练、模型评估与调优,以及最终的模型部署(尽管在本文
    的头像 发表于 07-12 16:39 692次阅读

    使用TensorFlow进行神经网络模型更新

    使用TensorFlow进行神经网络模型的更新是一个涉及多个步骤的过程,包括模型定义、训练、评估以及根据新数据或需求进行模型微调(Fine-tuning)或重新训练。下面我将详细阐述这个过程,并附上相应的TensorFlow代码
    的头像 发表于 07-12 11:51 343次阅读

    简单认识深度神经网络

    深度神经网络(Deep Neural Networks, DNNs)作为机器学习领域中的一种重要技术,特别是在深度学习领域,已经取得了显著的
    的头像 发表于 07-10 18:23 929次阅读

    深度神经网络概述及其应用

    深度神经网络(Deep Neural Networks, DNNs)作为机器学习的一种复杂形式,是广义人工神经网络(Artificial Neural Networks, ANNs)的
    的头像 发表于 07-04 16:08 714次阅读

    深度神经网络与基本神经网络的区别

    在探讨深度神经网络(Deep Neural Networks, DNNs)与基本神经网络(通常指传统神经网络或前向神经网络)的区别时,我们需
    的头像 发表于 07-04 13:20 668次阅读

    深度神经网络的设计方法

    深度神经网络(Deep Neural Networks, DNNs)作为人工智能领域的重要技术之一,通过模拟人脑神经元之间的连接,实现了对复杂数据的自主学习和智能判断。其设计方法不仅涉
    的头像 发表于 07-04 13:13 406次阅读

    bp神经网络深度神经网络

    BP神经网络(Backpropagation Neural Network)是一种常见的前馈神经网络,它使用反向传播算法来训练网络。虽然BP神经网络在某些方面与
    的头像 发表于 07-03 10:14 680次阅读

    卷积神经网络训练的是什么

    、训练过程以及应用场景。 1. 卷积神经网络的基本概念 1.1 卷积神经网络的定义 卷积神经网络是一种前馈深度学习模型,其核心思想是
    的头像 发表于 07-03 09:15 348次阅读

    深度学习与卷积神经网络的应用

    随着人工智能技术的飞速发展,深度学习和卷积神经网络(Convolutional Neural Network, CNN)作为其中的重要分支,已经在多个领域取得了显著的应用成果。从图像识别、语音识别
    的头像 发表于 07-02 18:19 801次阅读

    卷积神经网络和bp神经网络的区别

    化能力。随着深度学习技术的不断发展,神经网络已经成为人工智能领域的重要技术之一。卷积神经网络和BP神经
    的头像 发表于 07-02 14:24 2890次阅读

    深度神经网络模型有哪些

    、Sigmoid或Tanh。 卷积神经网络(Convolutional Neural Networks,CNN): 卷积神经网络深度学习中最重
    的头像 发表于 07-02 10:00 1158次阅读

    利用深度循环神经网络对心电图降噪

    具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI 我们提出了一种利用由长短期记忆 (LSTM) 单元构建的深度循环神经网络来降 噪心电图信号 (ECG
    发表于 05-15 14:42

    详解深度学习神经网络与卷积神经网络的应用

    在如今的网络时代,错综复杂的大数据和网络环境,让传统信息处理理论、人工智能与人工神经网络都面临巨大的挑战。近些年,深度学习逐渐走进人们的视线
    的头像 发表于 01-11 10:51 1900次阅读
    详解<b class='flag-5'>深度</b><b class='flag-5'>学习</b>、<b class='flag-5'>神经网络</b>与卷积<b class='flag-5'>神经网络</b>的应用