python123第三周_吴恩达 DeepLearning 第二课第三周编程学习笔记(1)

吴恩达 DeepLearning 第二课第三周编程课后作业原版本使用tensorflow1.X编写,此笔记仅为改写1.X版本代码到2.X版本使用(任然使用1.X版本的静态计算图)

1.导入所需要的库

import numpy as np

import h5py

import matplotlib.pyplot as plt

import tensorflow as tf

import math

from tensorflow.python.framework import ops

from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict

2.tensorflow1.X版本执行步骤

对于1.X版本的静态计算图而言需要分两步,第一步定义计算图,第二部在会话中执行计算图。

对于Tensorflow的代码实现而言,实现代码的结构如下:

(1).定义计算图:

创建Tensorflow张量(此时,尚未直接计算)

实现Tensorflow张量之间的操作定义

初始化Tensorflow张量

(2).执行计算图:

创建Session

运行Session

执行计算图方式 1:

sess = tf.compat.v1.Session() #创建Session

result = sess.run(...) #运行Session

sess.close() #使用后需要关闭Session

执行计算图方式 2:

with tf.compat.v1.Session() as session: #创建Session

session.run(init) #运行变量初始化(如果需要)

result = sess.run(...) #运行Session

例:使用静态计算图计算loss

# 创建Tensorflow张量y_hat,y分别为常数(此时,尚未直接计算),可定义dtype=数据类型(可选)

y_hat = tf.constant(36)

y = tf.constant(39)

#实现Tensorflow张量之间的操作来定义loss的值

loss = tf.Variable((y - y_hat)**2) #tf.Variable(初始值) 将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息,常用于定义W和b

tf.compat.v1.disable_eager_execution() # 在2.X版本保证session.run()能够正常运行

init = tf.compat.v1.global_variables_initializer() #定义初始化Tensorflow张量

#执行计算图

with tf.compat.v1.Session () as session: #创建Session

session.run(init) # 运行初始化张量

print(session.run(loss)) # 运行得到loss的值

#最终结果为(39-36)的平方,为9

在例子中如果没有执行计算图就直接输出loss,会得到Tensorflow的可训练的张量,不会得到数值9.

3.创建占位符:tf.compat.v1.placeholder(shape=[x,y],dtype=dtype)

因为在tf1.X版本中需要使用session来执行计算图,需要使用占位符来替代网络的输入X,以便在session中再为其赋具体值,而在tf2.X版本就不需要使用。

sess = tf.compat.v1.Session () #创建Session

x = tf.compat.v1.placeholder(tf.int64)#定义占位符

print(sess.run(2 * x, feed_dict = {x: 2}))#使用字典feed_dict,将x赋值2

sess.close()

4.计算成本:

计算成本多使用以下公式:

而在tf2.X使用 tf.nn.sigmoid_cross_entropy_with_logits(logits = a, labels = y)命令来完成输入z,计算a=sigmoid(z),计算成本的全过程。该函数输入预测值a以及标签值y,输出张量Tensor("logistic_loss:0", dtype=),需要使用session来运行得到具体值。

5.独热码的转换:tf.one_hot(待转换数据,depth=几分类,axis=)

在分类问题中,用独热码,即one_hot做标签,‘1’表示是,‘0’表示非,将待转换数据,转换为one_hot形式的张量(Tensor("one_hot_18:0", shape=, dtype=))进行输出,需要使用session来运行得到具体值。axis=0和1影响最终矩阵维度。

def one_hot_matrix(labels, C):

"""

定义:

labels -- 需要转化的标签

C -- 分类数目

整个函数返回值: 独热码矩阵

"""

# 转化独热码

one_hot_matrix = tf.one_hot(labels,C,axis=1)

# 运行Session,使得返回值为矩阵而非张量

sess = tf.compat.v1.Session()

one_hot = sess.run(one_hot_matrix)

sess.close()

return one_hot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值