TensorFlow Tutorial-1

版权为吴恩达老师所有,参考Koala_Tree的博客,部分根据自己实践添加

使用google翻译,部分手工翻译

你可能需要的参考资料https://pan.baidu.com/s/1qsARwdNcyaiJS3I6mM9S1A

TensorFlow教程

1 - 探索Tensorflow库

首先,您将导入库:

import math
import numpy as np 
import h5py
import matplotlib.pyplot as plt 
import tensorflow as tf
from tensorflow.python.framework import ops
from tf_utils import load_dataset,random_mini_batches,convert_to_one_hot,predict

np.random.seed(1)
tips:
1.安装教程:https://blog.csdn.net/qq_31788297/article/details/77689330 
2.win7 64位
3.tensorflow 1.7.0版本

现在您已经导入了库,我们将引导您完成其不同的应用程序。您将从一个示例开始,我们为您计算一个训练示例的损失。

loss=L(\hat{y},y)=(\hat{y}^{(i)},y^{(i)})^{2}

y_hat=tf.constant(36,name="y_hat")
y=tf.constant(39,name="y")

loss=tf.Variable((y-y_hat)**2,name="loss")
init=tf.global_variables_initializer()

with tf.Session() as session:
    session.run(init)
    print(session.run(loss))

在TensorFlow中编写和运行程序具有以下步骤:

  1. 创建尚未执行/评估的张量(变量)。
  2. 在这些张量之间编写操作。
  3. 初始化您的张量。
  4. 创建一个会话。
  5. 运行会话。这将运行您在上面编写的操作。

因此,当我们为损失创建变量时,我们只是将损失定义为其他数量的函数,但没有评估其值。为了评估它,我们必须运行init=tf.global_variables_initializer()。这初始化了损失变量,在最后一行中我们终于能够评估其值loss并打印其值。

现在让我们看一个简单的例子。运行下面的代码:

a=tf.constant(2)
b=tf.constant(10)
c=tf.multiply(a,b)
print(c)
Tensor("Mul:0", shape=(), dtype=int32)

正如所料,你不会看到20!你得到一个张量,说结果是一个没有shape属性的张量,并且类型为“int32”。你所做的只是放在'计算图'中,但你还没有运行这个计算。为了实际乘以这两个数字,您必须创建一个会话并运行它。

sess=tf.Session()
print(sess.run(c))

好!总而言之,请记住初始化变量,创建会话并在会话中运行操作

扫描二维码关注公众号,回复: 5624935 查看本文章

接下来,您还必须了解占位符。占位符是一个对象,其值只能在以后指定。 
要指定占位符的值,可以使用“feed dictionary”(feed_dict变量)传入值。下面,我们为x创建了一个占位符。这允许我们稍后在运行会话时传入一个数字。

x=tf.placeholder(tf.int64,name="x")
sess=tf.Session()
print(sess.run(2*x,feed_dict={x:3}))
sess.close()

首次定义时,x您不必为其指定值。占位符只是一个变量,您只能在以后运行会话时分配数据。我们说您在运行会话时向这些占位符提供数据

这是正在发生的事情:当您指定计算所需的操作时,您告诉TensorFlow如何构建计算图。计算图可以有一些占位符,其值将在稍后指定。最后,当您运行会话时,您告诉TensorFlow执行计算图。

1.1 - 线性函数

让我们通过计算以下等式开始这个编程练习:Y=WX+b,W和X是随机矩阵,b是随机向量。

练习:计算WX+b,当W,X和b是从随机正态分布中提取的。W的形状为(4,3),X为(3,1),b为(4,1)。作为示例,以下是如何定义具有形状(3,1)的常量X:

X = tf.constant(np.random.randn(3,1), name = "X")

您可能会发现以下函数
很有用: - tf.matmul(...,...)进行矩阵乘法
- tf.add(...,...)进行加法
- np.random.randn(...)随机初始化

def linear_function():
    np.random.seed(1)

    X=tf.constant(np.random.randn(3,1),name="X")
    W=tf.constant(np.random.randn(4,3),name="W")
    b=tf.constant(np.random.randn(4,1),name="b")
    Y=tf.add(tf.matmul(W,X),b)

    sess=tf.Session()
    result=sess.run(Y)

    sess.close()

    return result
print( "result = " + str(linear_function()))

1.2 - 计算sigmoid

好!您刚刚实现了线性函数。Tensorflow提供各种常用的神经网络功能,如tf.sigmoidtf.softmax。对于此练习,我们可以计算输入的sigmoid函数。

您将使用占位符变量执行此练习x。运行会话时,应使用提要​​字典传入输入z。在本练习中,您将必须(i)创建占位符x,(ii)定义使用sigmoid计算所需的操作tf.sigmoid,然后(iii)运行会话。

练习:在下面实现sigmoid函数。您应该使用以下内容:

  • tf.placeholder(tf.float32, name = "...")
  • tf.sigmoid(...)
  • sess.run(..., feed_dict = {x: z})

请注意,在tensorflow中创建和使用会话有两种典型方法:

方法1:

sess = tf.Session()
result = sess.run(..., feed_dict = {...})
sess.close() 

方法2:

with tf.Session() as sess: 
    result = sess.run(..., feed_dict = {...})
def sigmoid(z):
    x=tf.placeholder(tf.float32,name="x")
    sigmoid=tf.sigmoid(x)

    with tf.Session() as sess:
        result=sess.run(sigmoid,feed_dict={x:z})

    return result
print ("sigmoid(0) = " + str(sigmoid(0)))
print ("sigmoid(12) = " + str(sigmoid(12)))

总而言之,您知道如何
1.创建占位符
2.指定与您要计算的操作相对应的计算图
3.创建会话
4.运行会话,必要时使用源字典指定占位符变量的值。

1.3 - 计算成本

您还可以使用内置函数来计算神经网络的成本。因此,而不是需要编写代码来计算这个作为a^{[2](i)}y^{(i)}一个功能,对于i=1,...,m

你可以在tensorflow中的一行代码中完成它!

练习:实现交叉熵损失。您将使用的功能是:

  • tf.nn.sigmoid_cross_entropy_with_logits(logits = ..., labels = ...)

您的代码应该输入z,计算sigmoid(得到a),然后计算交叉熵成本J。所有这一切都可以通过一次调用来完成tf.nn.sigmoid_cross_entropy_with_logits,它会进行计算

def cost(logits,labels):
    z=tf.placeholder(tf.float32,name="z")
    y=tf.placeholder(tf.float32,name="y")

    cost=tf.nn.sigmoid_cross_entropy_with_logits(logits=z,labels=y)

    with tf.Session() as sess:
        cost=sess.run(cost,feed_dict={z:logits,y:labels})

    return cost
logits = sigmoid(np.array([0.2,0.4,0.7,0.9]))
cost = cost(logits, np.array([0,0,1,1]))
print ("cost = " + str(cost))

1.4 - 使用一个Hot encodings

很多时候,在深度学习中,你会得到一个数字范围从0到C-1的向量,其中C是类的数量。如果C例如是4,那么您可能需要转换以下y向量,如下所示:

还在路上,稍等...

这被称为“one hot”编码,因为在转换后的表示中,每列的一个元素恰好是“hot”(意味着设置为1)。要在numpy中进行此转换,您可能需要编写几行代码。在tensorflow中,您可以使用一行代码:

  • tf.one_hot(标签,深度,轴)

练习:实现下面的函数,以获取一个标签向量和类C的总数C,并返回一个Hot encodings。使用tf.one_hot()要做到这一点。

def one_hot_matrix(labels,C):
    C=tf.constant(value=C,name="C")
    one_hot_matrix=tf.one_hot(labels,C,axis=0)
    
    with tf.Session() as sess:
        one_hot=sess.run(one_hot_matrix)

    return one_hot
labels = np.array([1,2,3,0,2,1])
one_hot = one_hot_matrix(labels, C = 4)
print ("one_hot = " + str(one_hot))

1.5 - 用0和1初始化

现在,您将学习如何初始化0和1的向量。你要调用的功能是tf.ones()。要使用0进行初始化,可以使用tf.zeros()代替。这些函数采用一种形状并返回一个分别为0和1的维度形状的数组。

练习:实现下面的函数以获取形状并返回一个数组(形状的维度为1)。

  • tf.ones(形状)
def ones(shape):
    ones=tf.ones(shape)
    
    with tf.Session() as sess:
        ones=sess.run(ones)

    return ones
print ("ones = " + str(ones([3])))

猜你喜欢

转载自blog.csdn.net/smoggyxhdz/article/details/82256287
今日推荐