首页 > 其他分享 >tensorflow 数据及操作整理

tensorflow 数据及操作整理

时间:2023-09-06 09:14:30浏览次数:34  
标签:numpy random print tape tf 整理 tensorflow 操作 grad

 

目录:

# 1. 类型 # 2. 基础操作 # 3. 运算相关 # 4. 求导相关



数据类型:

############################## # 标量(0 维数组)、 # 向量(1 维数组)、 # 矩阵(2 维数组) # 张量 (Tensor), 概念上等同于多维数组  
# 1. 类型 # 定义一个随机数(标量)
random_float = tf.random.uniform(shape=())
print("random_float:",random_float)

random_1d = tf.zeros(shape=(1))
print("random_1d:",random_1d)

 


# 定义一个有2个元素的零向量
zero_vector = tf.zeros(shape=(2))
print("zero_vector:",zero_vector)

 


# 定义两个2×2的常量矩阵
A = tf.constant([[1., 2.], [3., 4.]])
B = tf.constant([[5., 6.], [7., 8.]])

print("tf.constant:",A)

print(A.shape)      # 输出(2, 2),即矩阵的长和宽均为2
print(A.dtype)      # 输出<dtype: 'float32'>
print(A.numpy())    # 输出[[1. 2.]

 

   
# 2. 基础操作
print(A+B)
print(A-B)
print(A*B)
print(A/B)
 

ten = tf.convert_to_tensor( [[1., 2.], [3., 4.]] )
random_1d = tf.zeros(shape=(1))
tf.zeros_initializer()
tf.zeros_like()
# tensor = tf.constant([[1, 2, 3], [4, 5, 6]])
# tf.zeros_like(tensor)  # [[0, 0, 0], [0, 0, 0]]

 

# # 7种初始化 #
tf.constant_initializer() #初始化给定的常量
tf.zeros_initializer()  # = tf.Zeros()  设0
tf.ones_initializer()
tf.random_normal_initializer(mean,stddev) # 正太分布
tf.truncatediv ## ??
tf.random_uniform_initializer(a,b,seed,dtype) # a-b 随机分布
tf.random_uniform_initializer #??

 


# #  打乱
tf.random.shuffle(val, seed, name) #沿着0维度打乱

 


# 检查维度
A.ndim()
tf.rank(A)
A.shape

#to numpy
A.numpy()

 

#检查数据类型
tf.is_tensor()
A.dtype
isinstance(A, tf.Tensor)

 


# ==> tf.Tensor  转成  tf 类型数据
ten = tf.convert_to_tensor( [[1., 2.], [3., 4.]] )
data_5d = np.random.rand(10000*5)
data_5d = data_5d.reshape((10000,5))
tensor = tf.convert_to_tensor( data_5d )

 


#数据转换
tf.cast(A, dtype = tf.float32)
tf.Variable(A)

 



#维度转变
tf.reshape(A,[4,-1,3])
tf.reshape(A,[4,784,3])

 


tf.transpose()  # 倒置

 


######################## # 3. 运算相关
A+B
tf.expand_dims(A, axis = 0)

 

 


# tf.GradientTape()  自动求导机制
x = tf.Variable(initial_value=3.)
with tf.GradientTape() as tape:     # 在 tf.GradientTape() 的上下文内,所有计算步骤都会被记录以用于求导
    y = tf.square(x)
y_grad = tape.gradient(y, x)        # 计算y关于x的导数
print(y, y_grad)



for x_n in [1.0,2.0,3.0]:
    x = tf.Variable(initial_value=x_n)
    with tf.GradientTape() as tape:     # 在 tf.GradientTape() 的上下文内,所有计算步骤都会被记录以用于求导
        y = tf.square(x)
    y_grad = tape.gradient(y, x)        # 计算y关于x的导数
    print("x, y,y_grad:", x_n, y.numpy(), y_grad.numpy())

 



######################################### ### 求导
# 更多情况是复杂的多元 函数 求导
X = tf.constant([[1., 2.], [3., 4.]])
y = tf.constant([[1.], [2.]])
w = tf.Variable(initial_value=[[1.], [2.]])
b = tf.Variable(initial_value=1.)
#  y = wx + b
with tf.GradientTape() as tape:
    L = tf.reduce_sum(tf.square(tf.matmul(X, w) - y)) # + b
    w_grad1    = tape.gradient(L,  w)
# w_grad, b_grad = tape.gradient(L, [w, b])        # 计算L(w, b)关于w, b的偏导数

# w_grad1    = tape.gradient(L,  [w])
print("L, w ,  w_grad,  :",L.numpy(),  w.numpy(),    w_grad1.numpy() )
# print("L, w ,  w_grad   :",L.numpy(),  w.numpy(),   w_grad.numpy()  )
# print("L, w ,b , w_grad, b_grad :",L.numpy(),  w.numpy(), b.numpy(),  w_grad.numpy(), b_grad.numpy() )

 


# 关于 tape.gradient  常规方法, 手工撸方程和参数更新方法
# y = wx + b
with tf.GradientTape() as tape:
    L = tf.reduce_sum(tf.square(tf.matmul(X, w) + b - y))  
w_grad, b_grad = tape.gradient(L, [w, b])        # 计算L(w, b)关于w, b的偏导数
print("L,w_grad:" , L,w_grad)


# y = wx  
with tf.GradientTape() as tape:
    L = tf.reduce_sum(tf.square(tf.matmul(X, w)   - y))  
w_grad1  = tape.gradient(L, w)        # 计算L(w, b)关于w, b的偏导数
print("L,w_grad1:" , L,w_grad1)

 

# 关于 tape.gradient  用tf 方法 # 使用 tape.gradient(ys, xs) 自动计算梯度; # 使用 optimizer.apply_gradients(grads_and_vars) 自动更新模型参数。

######################################### ###  线性回归

# 数据准备
import numpy as np

X_raw = np.array([2013, 2014, 2015, 2016, 2017], dtype=np.float32)
y_raw = np.array([12000, 14000, 15000, 16500, 17500], dtype=np.float32)

X = (X_raw - X_raw.min()) / (X_raw.max() - X_raw.min())
y = (y_raw - y_raw.min()) / (y_raw.max() - y_raw.min())


a, b = 0, 0
num_epoch = 10000
learning_rate = 5e-4
for e in range(num_epoch):
    # 手动计算损失函数关于自变量(模型参数)的梯度   y = ax + b
    y_pred = a * X + b
    grad_a, grad_b = 2 * (y_pred - y).dot(X), 2 * (y_pred - y).sum()
    # 更新参数
    a, b = a - learning_rate * grad_a, b - learning_rate * grad_b

print(a, b)

 



###  线性回归  使用 tf 方式
X = tf.constant(X)
y = tf.constant(y)

a = tf.Variable(initial_value=0.)
b = tf.Variable(initial_value=0.)
variables = [a, b]

num_epoch = 10000
optimizer = tf.keras.optimizers.SGD(learning_rate=5e-4)
for e in range(num_epoch):
    # 使用tf.GradientTape()记录损失函数的梯度信息
    with tf.GradientTape() as tape:
        y_pred = a * X + b
        loss = tf.reduce_sum(tf.square(y_pred - y))
        print(e, "loss" , loss.numpy() )    
    # TensorFlow自动计算损失函数关于自变量(模型参数)的梯度
    grads = tape.gradient(loss, variables)
    # TensorFlow自动根据梯度更新参数
    optimizer.apply_gradients(grads_and_vars=zip(grads, variables))

 


 

 

 

标签:numpy,random,print,tape,tf,整理,tensorflow,操作,grad
From: https://www.cnblogs.com/xiaoxuebiye/p/17681359.html

相关文章

  • 操作系统原理 1.1_2 操作系统的特征
    学习教程:【王道计算机考研操作系统-哔哩哔哩】https://b23.tv/fFY1XPi操作系统的特征并发并发:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生,微观上是交替发生的。并发性是操作系统一个最基本的特征。易混概念—并行:指两个或多个事件在同一时刻同时发生。......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • SQL——DDL操作
    一、DDL查询表中数据1.简单查询查询不会对数据库中的数据进行修改,只是一种显示数据的方式。--语法格式:select字段名1,字段名2,...from表名;例:查询所有的员工信息,将字段名显示为中文selecteidas'编号',--as可以省略enameas'姓名',sex......
  • 深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
    在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中,<foreach>标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。本文将带您深入探......
  • 深度神经网络中基于卷积操作的自适应学习算法研究
    本文提出了一种基于卷积操作的自适应学习算法,用于深度神经网络中。该算法通过引入复杂的数学公式和高阶张量操作,实现了对复杂模式的准确建模和学习。我们通过对网络架构的改进和参数的优化,提高了模型的泛化能力和性能表现。实验结果表明,我们的算法在多个基准数据集上取得了优于现有......
  • Django admin 添加操作记录
    1:引入日志模块fromsimple_history.adminimportSimpleHistoryAdmin2:admin类继承 SimpleHistoryAdmin 3:对应model添加字段历史记录字段history=HistoricalRecords(excluded_fields=['user','create_time','update_time'])......
  • springCloud学习笔记整理
    springCloud学习笔记整理1.分布式分布式的概念:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。分布式架构的优缺点:优点:降低服务耦合有利于服务升级和拓展缺点:服务调用关系错综复杂2.微服务微服务的上述特性其实是在给分布式架构制......
  • 文件操作补充+函数伊始
    二进制模式下读写操作#withopen('a.txt','r',encoding='utf-8')asf:#print(f.read(5))withopen('a.txt','rb')asf:#print(f.read().decode('utf-8'))#b'helloworld'print(f.rea......
  • Python文件的基础操作(2)
    Python文件的基础操作(2)二进制模式下读写操作练习控制文件内指针(光标)的移动文件的修改函数的介绍练习#小练习:编写拷贝工具 1.让用户输入被拷贝的文件路径(源文件路径)2.输入即将要拷贝的文件路径(目标文件路径)3.以读的模式打开源文件,以写的模式打开目标......
  • 基本操作系统学习笔记
    1、Vmware、OS简述1、虚拟机定义虚拟机(VirtualMachine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离的环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和......