Tensorflow教程分享:TensorFlow 基础详解

Tensorflow入门 文章简单介绍了tensorflow和keras,并用鸢尾花(iris)分类案例,介绍tf.keras的基本使用流程。 阅读详情


                                                                            Fly-AI竞赛服务平台 flyai.com

在开始学习之前推荐大家可以多在          FlyAI竞赛服务平台 多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。  

目录

  计算图纸

  Tensor 张量意义

  自动求导机制

  基础示例:线性回归

  NumPy 下的线性回归

  TensorFlow 下的线性回归

  计算图纸

  Tensorflow 首先要定义神经网络的结构, 然后再把数据放入结构当中去运算和 training.

  因为TensorFlow是采用 数据流图(data flow graphs) 来计算, 所以首先我们得创建一个数据流图, 然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算. 节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组, 即张量(tensor). 训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点, 这就是TensorFlow名字的由来.

  Tensor 张量意义

  张量(Tensor): 张量有多种.

  零阶张量为 纯量或标量 (scalar) 也就是一个数值. 比如 [1]

  random_float = tf.random.uniform(shape=()) 定义一个随机数

  一阶张量为 向量 (vector), 比如 一维的 [1, 2]

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

  二阶张量为 矩阵 (matrix), 比如 二维的 [[1, 2],[3, 4]]

  A = tf.constant([[1., 2.], [3., 4.]]) 定义一个2×2的常量矩阵

  以此类推, 还有 三阶 三维的 …

  张量的重要属性是其形状、类型和值。可以通过张量的 shape 、 dtype 属性和 numpy() 方法获得。例如:

  # 查看矩阵A的形状、类型和值

  print(A.shape) # 输出(2, 2),即矩阵的长和宽均为2

  print(A.dtype) # 输出

  print(A.numpy()) # 输出[[1. 2.]

  # [3. 4.]]

  TensorFlow 的大多数 API 函数会根据输入的值自动推断张量中元素的类型(一般默认为 tf.float32)。不过你也可以通过加入 dtype 参数来自行指定类型,例如 zero_vector = tf.zeros(shape=(2), dtype=tf.int32) 将使得张量中的元素类型均为整数。

  张量的 numpy() 方法是将张量的值转换为一个 NumPy 数组。

  自动求导机制

  在机器学习中,我们经常需要计算函数的导数。TensorFlow 提供了强大的 自动求导机制 来计算导数。在即时执行模式下,TensorFlow 引入了 tf.GradientTape() 这个 “求导记录器” 来实现自动求导。

  在机器学习中,更加常见的是对多元函数求偏导数,以及对向量或矩阵的求导。这些对于 TensorFlow 也不在话下。以下代码展示了如何使用 tf.GradientTape() 计算函数  

L(w, b) = \|Xw + b - y\|^2

  L(w,b)=∥Xw+b−y∥2

  X = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, y = \begin{bmatrix} 1 \\ 2\end{bmatrix}

  X=[13​24​],y=[12​]。

  import tensorflow as tf

  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.)

  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, b_grad)

  输出:  

tf.Tensor(125.0, shape=(), dtype=float32)

  tf.Tensor(

  [[ 70.]

  [100.]], shape=(2, 1), dtype=float32)

  tf.Tensor(30.0, shape=(), dtype=float32)

  tf.square() 操作代表对输入张量的每一个元素求平方,不改变张量形状。

  tf.reduce_sum() 操作代表对输入张量的所有元素求和,输出一个形状为空的纯量张量(可以通过 axis 参数来指定求和的维度,不指定则默认对所有元素求和)。

  从输出可见,TensorFlow 帮助我们计算出了

  L((1, 2)^T, 1) = 125

  L((1,2)T,1)=125

  \frac{\partial L(w, b)}{\partial w} |_{w = (1, 2)^T, b = 1} = \begin{bmatrix} 70 \\ 100\end{bmatrix}

  ∂w∂L(w,b)​∣w=(1,2)T,b=1​=[70100​]

  \frac{\partial L(w, b)}{\partial b} |_{w = (1, 2)^T, b = 1} = 30

  ∂b∂L(w,b)​∣w=(1,2)T,b=1​=30

  基础示例:线性回归

  考虑一个实际问题,某城市在 2013 年 - 2017 年的房价如下表所示:

  

在这里插入图片描述

 

  现在,我们希望通过对该数据进行线性回归,即使用线性模型

  y = ax + b大连人流医院 http://mobile.bhbyby.net/

  y=ax+b 来拟合上述数据,此处 a和 b 是待求的参数。

  首先,我们定义数据,进行基本的归一化操作。

  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 的值。

  回顾机器学习的基础知识,对于多元函数

  f(x) 求局部极小值,梯度下降 的过程如下:

  初始化自变量为

  x_0 , k=0

  x0​,k=0迭代进行下列步骤直到满足收敛条件:

  求函数f(x)

  f(x) 关于自变量的梯度

  \nabla f(x_k)

  ∇f(xk​)更新自变量

  x_{k+1} = x_{k} - \gamma \nabla f(x_k)

  xk+1​=xk​−γ∇f(xk​) 。这里

  γ\gamma

  γ 是学习率(也就是梯度下降一次迈出的 “步子” 大小)

  k \leftarrow k+1

  k←k+1

  接下来,我们考虑如何使用程序来实现梯度下降方法,求得线性回归的解

  \min_{a, b} L(a, b) = \sum_{i=1}^n(ax_i + b - y_i)^2

  mina,b​L(a,b)=∑i=1n​(axi​+b−yi​)2 。

  NumPy 下的线性回归

  在以下代码中,我们手工求损失函数关于参数 a 和 b 的偏导数,并使用梯度下降法反复迭代,最终获得 a 和 b 的值。  

a, b = 0, 0

  num_epoch = 10000

  learning_rate = 5e-4

  for e in range(num_epoch):

  # 手动计算损失函数关于自变量(模型参数)的梯度

  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)

  TensorFlow 下的线性回归

  TensorFlow 的 即时执行模式 与上述 NumPy 的运行方式十分类似,然而提供了更快速的运算(GPU 支持)、自动求导、优化器等一系列对深度学习非常重要的功能。以下展示了如何使用 TensorFlow 计算线性回归。可以注意到,程序的结构和前述 NumPy 的实现非常类似。这里,TensorFlow 帮助我们做了两件重要的工作:

  使用 tape.gradient(ys, xs) 自动计算梯度;

  使用 optimizer.apply_gradients(grads_and_vars) 自动更新模型参数。  

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))

  # TensorFlow自动计算损失函数关于自变量(模型参数)的梯度

  grads = tape.gradient(loss, variables)

  # TensorFlow自动根据梯度更新参数

  optimizer.apply_gradients(grads_and_vars=zip(grads, variables))

  在这里,我们使用了前文的方式计算了损失函数关于参数的偏导数。

  同时,使用 tf.keras.optimizers.SGD(learning_rate=5e-4) 声明了一个梯度下降 优化器 (Optimizer),其学习率为 5e-4。优化器可以帮助我们根据计算出的求导结果更新模型参数,从而最小化某个特定的损失函数,具体使用方式是调用其 apply_gradients() 方法。

  注意到这里,更新模型参数的方法 optimizer.apply_gradients() 需要提供参数 grads_and_vars,即待更新的变量(如上述代码中的 variables )及损失函数关于这些变量的偏导数(如上述代码中的 grads )。

  具体而言,这里需要传入一个 Python 列表(List),列表中的每个元素是一个(变量的偏导数,变量) 对。比如上例中需要传入的参数是 [(grad_a, a), (grad_b, b)] 。我们通过 grads = tape.gradient(loss, variables) 求出 tape 中记录的 loss 关于 variables = [a, b] 中每个变量的偏导数,也就是 grads = [grad_a, grad_b],再使用 Python 的 zip() 函数将 grads = [grad_a, grad_b] 和 variables = [a, b] 拼装在一起,就可以组合出所需的参数了。

  在实际应用中,我们编写的模型往往比这里一行就能写完的线性模型 y_pred = a * X + b (模型参数为 variables = [a, b] )要复杂得多。所以,我们往往会编写并实例化一个模型类 model = Model() ,然后使用 y_pred = model(X) 调用模型,使用 model.variables 获取模型参数。


更多精彩内容请访问FlyAI-AI竞赛服务平台;为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台;每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。

挑战者,都在FlyAI!!!

 

TensorFlow 入门 | (一)基本知识详解 本文介绍TensorFlow的基本知识 一、TensorFlow 的认识 先来看下TensorFlow模块和一些APIs,简单了解一下 TensorFlow数据流图: 一种声明式编程方式,不同于命令式编程。不拘泥于内部具体的实现过程,而是模型化,结构化。两种编程方式的具体细节可自行百度。 TensorFlow数据流图如下所示,如果学过图论的话很很容易理解,最主要的两个概念就是“边”和“节点” ... 阅读详情

相关推荐

TensorFlow的深度解析与应用

TensorFlow是由Google Brain团队开发的开源机器学习框架,用于进行高性能的数值计算。其名称来源于它的核心数据结构——张量(Tensor),以及计算流程图(Flow)的概念。TensorFlow支持分布式计算,可以运行在各种硬件平台上,包括CPU、GPU和TPU(Tensor Processing Unit)。灵活性:TensorFlow支持动态计算图,允许在运行时改变计算流程。高效性。

2301_78863619的博客 1284

什么是tensorflow

什么是tensorflow tenroflow是Google开源软件库,为机器学习工程中的问题提供了一整套解决方案。类比于Spark/Flink是大数据工程问题的解决方案。 该软件库把机器学习中的通用功能封装成了库,并提供了简易的API,使得在构建机器学习系统时不再需要做那些纷繁复杂的数学或 者工程工作,能把主要精力放在模型和业务上。这就像现在使用编程语言进行编程时,不再需要知道计算机硬件的细节,不用知道CPU的指令集。从这个意义上说,tensorflow 让机器学习工程从汇编语言时代,上升到了高级语言

wyg_031113的专栏 3万+

Linux上安装 tensorflow (重在阐述导入错误)

以:AttributeError: module ‘pandas’ has no attribute ‘core’为例。

PzLu's Blog 2256

一文读懂 TensorFlow 深度学习框架:从基础到实战!

TensorFlow 最初由 Google Brain 团队开发,于 2015 年开源。经过多年的发展,它已经成为了一个高度灵活且功能丰富的深度学习框架,广泛应用于各类机器学习算法的编程实现。TensorFlow 作为一款功能强大的深度学习框架,为开发者提供了丰富的工具和灵活的编程模型,无论是初学者快速上手深度学习,还是研究人员进行复杂模型的开发,都能从中受益。通过本文的介绍和操作示例,希望你能对 TensorFlow 有更深入的理解,并在实际项目中灵活运用。

Stuomasi_xiaoxin的博客 1万+

SSD Tensorflow 训练测试自己的数据集 Jupiter notebook 显示训练结果

一份非常简单易懂的SSD tensorflow训练教程,初学者也可以看得懂。当初自学的时候走了很多弯路,所以把自己的经验和踩过的坑分享给大家,如果文中有什么写的不对的地方欢迎大家在评论区和我讨论。 零、前期准备 安装Tensorflow-GPU版本。   一、SSD框架准备 从https://github.com/balancap/SSD-Tensorflow 下载、解压。 解压che...

Echo_Harrington的博客 7855

【1月26日更新】如何入门 TensorFlow ? “开发者出道计划”第一期话题精华内容汇总

大家好!“TensorFlow 开发者出道计划”第一期正在火热展开中!在11月-1月,出道计划第一期围绕“如何入门 TensorFlow”,社区内上线了超级多的实用技术干货,更重磅邀请来自 优快云 的百大热门技术博主倾囊分享成长心得。在社区的问答版块,关于 TensorFlow 的讨论也在实时火热进行中! 为了帮助开发者伙伴更方便检索到这些优质内容,小编特地整理了本篇精华帖,为大家收录优质内容的链接直通车,帮助大家一步到位 get 到自己想要看的好内容!本篇精华帖将持续更新,建议你动动手指把它收录到自己

tensorflowforum的博客 7084

猫头虎分享:Python库 TensorFlow 的简介、安装、用法详解入门教程

今天猫头虎带大家走进人工智能的核心领域,深入探讨TensorFlow这个强大的Python库。从TensorFlow的基础简介到详细的安装和用法,这篇教程将带你从零开始,掌握这门重要技术。在本篇文章中,猫头虎不仅会分享如何安装TensorFlow,还会展示一些实用的代码案例,帮助大家更好地理解TensorFlow的强大功能。TensorFlow是由 Google 开发并于 2015 年开源的一个机器学习和深度学习框架。它被设计用于帮助开发者轻松构建和部署神经网络。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 8013

Tensorflow 2.0 教程-Windows10安装tensorflow2.0

Windows10安装tensorflow2.0(GPU、CPU) 完整tensorflow2.0教程代码请看github:中文教程tensorflow2_tutorials_chinese(欢迎star) 更多TensorFlow2.0 入门教程请持续关注本博客:https://blog.youkuaiyun.com/qq_31456593/article/details/88606284 1.安装anac...

知行_那片天 2万+

tensorflow官方文档_开源分享:最好的TensorFlow入门教程

如果一门技术的学习曲线过于陡峭,那么我们在入门时的场景往往是,一鼓作气,没入门,再而衰,三而竭。演绎一出从入门到放弃的败走麦城。今天发现一个入门TensorFlow的宝藏,迫不及待的分享给大家。这个开源项目的目标就是降低TensorFlow的学习难度,先把你领进门。本书是一本对人类用户极其友善的TensorFlow2.0入门工具书,不刻意恶心读者是本书的底限要求,Don't let me thin...

weixin_39581716的博客 130

谷歌Tensorflow 2.0最全书籍、实战项目、代码、官方视频教程分享

TensorFlow 2.0已经正式发布了。这里为大家推荐了一些关于Tensorflow 2.0的优质学习资源: 1、TensorFlow 2.0 很多方面特性都基于 Keras,强烈建议深度学习新手先学习 François Chollet 写的书《Deep Learning with Python》,以及随书附带的代码https://github.com/fch...

lqfarmer的博客 8980

Tensorflow 2.0历史最全资源中文版整理分享-教程、博客、代码和视频教程

本文整理了Tensorflow 2.x相关的教程、博客、代码和视频教程,最新的的书籍等丰富的资源,分享给大家。 资源整理自网络,源地址:https://github.com/Amin-Tgz/awesome-tensorflow-2#books 本资源带链接版下载方式: 链接: https://pan.baidu.com/s/10AaNDkep-Bd...

lqfarmer的博客 1966

关于TensorFlow官方教程imdb电影评价实例中报错AssertionError: Unrecognized instruction format: NamedSplit的问题

笔者也是刚刚接触TensorFlow,在学习按照官方教程的过程中有一个很简单的电影评价例子。 其导入数据的代码为: train_validation_split = tfds.Split.TRAIN.subsplit([6, 4]) (train_data, validation_data), test_data = tfds.load( name="imdb_reviews", ...

kiva12138的博客 3289

TensorFlow入门教程(1)安装、基础、Tensorboard

TensorFlow入门教程

theeternal的博客 3159

TensorBoard可视化教程:如何有效监控和调试TensorFlow模型

TensorBoard是TensorFlow官方提供的强大可视化工具,能够帮助开发者实时监控模型训练过程、分析网络结构和调试性能瓶颈。本教程将带你快速掌握TensorBoard的核心功能与使用方法,让你的TensorFlow模型开发效率提升30%! ## 为什么选择TensorBoard? 在深度学习模型开发中,我们常常需要: - 追踪损失值和准确率的变化趋势 - 分析模型参数的分布和梯度情况

gitblog_00664的博客 934

使用 Unity Sentis 和 Compute Shader,det_10g.onnx 进行高效人脸五官定位

在计算机视觉领域,人脸五官定位是一个重要的任务。本文将介绍如何使用 Unity Sentis 和 Compute Shader,结合模型,实现高效的人脸五官定位。我们将详细讲解每一步骤,并提供完整的代码示例。

m0_55632444的博客 2393

BurpSuit在不同浏览器中配置代理

文章通过分享各大浏览器如何设置代理的知识,帮助初学者快速掌握代理配置相关技能。

北冥同学的成长记录笔记 1万+

window+anaconda+tensorflow快速安装--2019.5.19

网上虽然有很多类似的快速下载tensorflow教程,但经过本人尝试都不好使呜呜呜,而且今天发现清华源也不能下tensorflow了,就试了其他几个源嘻嘻嘻,下面是过程(说不定哪天就不好使了,大家注意时间啊) 首先,anaconda最新版本,上网自行下载就好啦 然后,打开Anaconda Prompt pip install tensorflow -i https://pypi.douban.co...

weixin_30556161的博客 927

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 302

终极指南:如何利用Awesome-TensorFlow构建开放AI技术生态的未来愿景

TensorFlow作为一款开源的数值计算软件库,已成为构建深度学习模型的最佳工具之一。Awesome-TensorFlow项目则是一个精心策划的资源列表,汇集了丰富的TensorFlow实验、库和项目,为开发者和研究人员提供了全面的学习和实践平台。本文将深入探讨Awesome-TensorFlow的未来愿景,以及如何通过这一项目推动AI技术生态的开放与发展。 ## 🌟 Awesome-Ten

gitblog_00464的博客 362

【OpenClaw从入门到精通】第60篇:多智能体协同实战——用“龙虾”搭建你的数字员工团队(2026企业版)

2026年AI Agent企业落地的核心趋势,正从“单Agent单兵作战”转向“多智能体协同组网”。本文以全球开发者先锋大会“百虾大战”真实案例为蓝本,深度拆解OpenClaw多智能体协同的技术内核——三层解耦架构(模型层-技能层-网关层),系统搭建包含项目经理、架构师、执行者、质量把关者的4大核心Agent团队。通过三种主流协作架构对比、全链路配置代码实操、故障自愈实战演练,结合电商新品上架虚拟场景全流程演示,解决企业多Agent部署中的权限隔离、任务协同、运维自治三大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 768

29、固态变压器拓扑、设计及其应用深度解析

本文深入解析了固态变压器(SST)的拓扑结构、设计方法及其在智能电网和能源互联网中的应用。重点探讨了机器学习在SST优化设计中的应用,包括中高频变压器设计、整体系统优化与建模研究。文章详细介绍了多端口SST的拓扑特点、功率传输机制及其作为能源路由器的关键作用,分析了不同端口数量下的控制复杂度与应用场景,并通过案例研究展示了四端口SST在分布式能源系统中的实际应用。最后,文章总结了多端口SST面临的技术挑战,并展望了未来在先进控制策略、集成化设计和标准化方面的发展方向。

study的专栏 3791

TensorFlow2.1ImportError: DLL load failed: 找不到指定的模块

TensorFloW2.1安装中的坑 ImportError: DLL load failed: 找不到指定的模块。 本人一名小白,最近开始学习机器学习,anaconda的安装根据网上的教程来安装 TensorFlow环境以及安装好但在运行代码时报错,网上有不少解决这个问题的方法,本人犯了一来就尝试,废了不少力的没有解决,后来突然发现很多指导方法已经相对时间比较久了,也是提个醒 及时注意网上教程安...

weixin_43504369的博客 1758

Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用

散点图作为一种直观且功能强大的数据可视化工具,在数据分析中具有广泛的应用。通过观察散点图中数据点的分布模式,我们可以轻松地判断变量之间是否存在相关性,以及相关性的类型和强度。同时,散点图也是识别数据集中异常值的有效工具,无论是通过直观观察还是结合统计方法,都能帮助我们发现数据中的异常情况。掌握散点图的绘制和分析技巧,将使我们在数据探索和决策制定中更加得心应手。

SiArch的博客 1444

TensorFlow2教程汇总

整理了网络上比较常见的几个全面系统的教程

发布工作学习过程中遇到的问题和解决方案 1314

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8899

月薪30k+的工业视觉,必备Java+YOLO技能(工业级落地全拆解)

30k+工业视觉岗的核心不是算法调参,而是用Java把YOLO落地到工业场景的能力——稳运行、能对接、可管理是高薪的核心壁垒;必备技能分五层:模型工业级适配、Java推理核心、SpringBoot后端、工业部署运维、场景适配,每层都要练到“能落地、能讲清、能避坑”;学习路径的核心是“实战驱动”:不要只学理论,从一个完整的工业项目(如锂电缺陷检测)入手,练完就能对标高薪岗。

2601_94871597的博客 524
上一篇: Facebook新AI模型SEER实现自监督学习,LeCun大赞最有前途
下一篇: Tensorflow基础教程2:Tensorflow模型建立与训练
iFlyAI
博客等级 码龄9年 238粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值