[DL]1.开始学习TensorFlow

CXL Virtual Hierarchy (VH) Enumeration理解 在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。 阅读详情

原文链接


开始学习TensorFlow

在学习本文之前,需要首先安装Tensorflow。本文介绍以下知识:

  • 如何使用Python编程
  • 关于矩阵的一些知识
  • 关于机器学习的一些知识

TensorFlow提供多种多样的API。最底层的API是Tensorflow Core,提供完全的程序控制。我们推荐机器学习研究者以及其他想要对他们的模型有更良好的控制能力的这类人使用TensorFLow Core。更高级的API是构建在Tensorflow Core基础之上的。这些更高等级的API减少重复性工作并且能在不同的用户之间保持一致性。比如tf.contrib.learn协助管理数据集,估计,训练和接口。值得注意的是一些高等级的API方法名字包含contrib的是在开发版本。这意味着一些contrib方法有可能在接下来的版本中过时或者改变。
本文使用Tensorflow Core作为入门。接着介绍了如何使用tf.contrib.learn实现相同的模型。了解Tensorflow Core的规则将使得你能够在心里明白使用更高级的API时模型内部是如何工作的。

张量(Tensor)

tensor(张量)是TensorFlow中数据的中心单元。张量由原始值的集合组成通过变形为多维矩阵。张量的等级是它的维度数量。这里给出部分示例:

3 # 0 tensor
[1. ,2., 3.] # 1 tensor 3维
[[1., 2., 3.], [4., 5., 6.]] # 2 tensor   2*3维
[[[1., 2., 3.]], [[7., 8., 9.]]] # 3 tensor 2*1*3维

TensorFlow Core 教程

导入 TensorFlow

tensorFlow的import表达式一般长这个样子:

import tensorflow as tf

import之后,就可以调用所有的TensorFlow类,方法,符号了。

The Computational Graph

TensorFlow Core程序由两个分离的部分组成:

  • 创建图
  • 运行图

计算图(computational graph)将一系列的TensorFLow操作排列成图的节点。下面试着创建一个简单的图。每一个图有0个或者多个tensor输入,一个张量作为输出。节点的一种类型是常量,正如所有的TensorFlow常量一样,这个常量没有输入,输出的是它内部保存的值。下面创建了两个浮点型张量 node1和node2:

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)

输出:

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)

注意,这里的最终输出并不是3.4和4.0,而是当评估他们的时候将分别输出3.0和4.0.为了最终评估节点,必须在一个session里面运行图。一个session封装tensorflow运行时的控制和状态。

下面将创建一个sesion对象,之后调用它的run方法来通过运行图来评估node1和node2.如下演示了如何在session中运行图:

sess = tf.Session()
print(sess.run([node1, node2]))

可以看到最终的输出是3.0 and 4.0:

[3.0, 4.0]

我们可以通过组合多个张量节点以及操作(操作也是节点)来完成更复杂的计算。比如,将两个常量节点相加,生成一个新的图:

node3 = tf.add(node1, node2)
print("node3: ", node3)
print("sess.run(node3): ",sess.run(node3))

最后两句表达式的输出如下:

node3:  Tensor("Add_2:0", shape=(), dtype=float32)
sess.run(node3):  7.0

TensorFlow提供一个很实用的称为TensorBoard的工具,它可以可视化一个图。这里给出一个TensorBoard可视化图之后的结果:
img

图中并没有什么特别值得注意的东西,因为它仅仅生成一个常量结果。图可以通过参数化来接受外部的输入,称为placeholder。一个placeholder预示着它将提供数值。

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  #tf.add(a, b)的快速实现

上面的三行代码像一个方法或者lambda表达式,定义了两个输入以及一个操作。我们可以通过使用feed_dict为tensor中的placeholder指定输入参数来评估图。

print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))

输出为:

7.5
[ 3.  7.]

在TensorBoard中显示如下:
img
我们可以用图来完成更复杂的操作:

add_and_triple = adder_node * 3.
print(sess.run(add_and_triple, {a: 3, b:4.5}))

输入如下:

22.5

在TensorBroad中如下所示:

机器学习中,我们通常想要一个模型能够接受任意参数作为输入。为了使得模型可训练,我们需要修改图接收相同的输入产生新的输出。Variables允许我们给图添加可训练的参数,Variables仅通过初始值和类型构造:

W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b

常量在调用tf.constant方法的时候初始化,并且之后不能被改变。相反的,变量在调用tf.variable的时候没有初始化。在TensorFlow程序中为了初始化所有的变量需要通过如下的操作:

init = tf.global_variables_initializer()
sess.run(init)

init是TensorFlow子图的一个操作,用来初始化所有的全局变量。直到调用了sess.run,变量才会被初始化。
既然x是一个placeholder,我们可以同时给x取多个值来评估linear_model。
print(sess.run(linear_model, {x:[1,2,3,4]}))
输出为:

[ 0.          0.30000001  0.60000002  0.90000004]

到这里,我们已经创建了一个模型,但是我们不知道他到底有多好。为了在训练数据基础上评估这个模型,我们需要一个placeholder类型的y来提供期望的数值,并且需要写一个损失函数。
损失函数当前模型输出距离提供的结果的误差有多大。我们将使用一个标准的线性回归损失模型:通过计算目标结果减去当前模型的结果的差值的平方的和。linear_model-y得到一个向量,向量的每一维都对应相应的误差。通过调用tf.square计算误差的平方。然后使用tf.reduce_sum把所有误差的平方相加得到一个单独标量表示所有的误差。

y = tf.placeholder(tf.float32)
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

输出的误差为:

23.66

我们可以手动的改进这个模型,通过调整W为-1和b的值为1得到完美的结果。通过给tf.Variable声明的时候赋值来初始化一个变量,变量的值可以通过使用tf.assign操作来改变。比如W=-1和b=1就是这个模型最优的结果:

fixW = tf.assign(W, [-1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))

最后的输出显示损失值为:

0.0

这里我们是通过猜测来找到W和b的值,但是在机器学习中找到正确的模型参数是自动进行的。本文将在接下来介绍如何实现。

tf.train API

TensorFlow提供优化器通过慢慢的改变每一个变量的值来最小化损失函数。最简单的优化器就是梯度下降,根据损失函数对变量求得的导数大小来改变每一个变量。TensorFlow能够使用tf.gradients方法对模型自动求导。简单的来说,优化器通常自动的完成这个任务,比如:

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init) # reset values to incorrect defaults.
for i in range(1000):
  sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]})

print(sess.run([W, b]))

模型参数的结果:

[array([-0.9999969], dtype=float32), array([ 0.99999082],
 dtype=float32)]

以上就完成了简单的机器学习的线性回归的例子。TensotFlow通过少量的代码就完成了上述任务,当然了,复杂的模型和方法需要更多的代码。TensorFlow提供更高等级的共同模式,结构,方法的抽象。在接下来的章节将介绍这些。

完整的代码

import numpy as np
import tensorflow as tf
# Model parameters
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
# Model input and output
x = tf.placeholder(tf.float32)
linear_model = W * x + b
y = tf.placeholder(tf.float32)
# loss
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
# training data
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]
# training loop
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
  sess.run(train, {x:x_train, y:y_train})

# evaluate training accuracy
curr_W, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))

最后的输出如下:

W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11

本例比之前的例子更复杂,但是也可以通过TensorFlowBroad可视化。

tf.contrib.learn

tf.contrib.learn是一个高等级的TensorFlow类,它使得机器学习变得简单,包括:

  • 循环进行训练
  • 循环进行评估
  • 管理数据集
  • 管理反馈

tf.contrib.learn定义了很多公共模型。

基本用法

tf.contrib.learn使得线性回归变得更加简单:

import tensorflow as tf
# NumPy is often used to load, manipulate and preprocess data.
import numpy as np

# Declare list of features. We only have one real-valued feature. There are many
# other types of columns that are more complicated and useful.
features = [tf.contrib.layers.real_valued_column("x", dimension=1)]

# An estimator is the front end to invoke training (fitting) and evaluation
# (inference). There are many predefined types like linear regression,
# logistic regression, linear classification, logistic classification, and
# many neural network classifiers and regressors. The following code
# provides an estimator that does linear regression.
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features)

# TensorFlow provides many helper methods to read and set up data sets.
# Here we use two data sets: one for training and one for evaluation
# We have to tell the function how many batches
# of data (num_epochs) we want and how big each batch should be.
x_train = np.array([1., 2., 3., 4.])
y_train = np.array([0., -1., -2., -3.])
x_eval = np.array([2., 5., 8., 1.])
y_eval = np.array([-1.01, -4.1, -7, 0.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x_train}, y_train,
                                              batch_size=4,
                                              num_epochs=1000)
eval_input_fn = tf.contrib.learn.io.numpy_input_fn(
    {"x":x_eval}, y_eval, batch_size=4, num_epochs=1000)

# We can invoke 1000 training steps by invoking the  method and passing the
# training data set.
estimator.fit(input_fn=input_fn, steps=1000)

# Here we evaluate how well our model did.
train_loss = estimator.evaluate(input_fn=input_fn)
eval_loss = estimator.evaluate(input_fn=eval_input_fn)
print("train loss: %r"% train_loss)
print("eval loss: %r"% eval_loss)

最终的结果:

    {'global_step': 1000, 'loss': 1.9650059e-11}
自定义模型

tf.contrib.learn 并没有限定模型. 如果想要创建一个TensorFlow中没有创建的模型,我们依然可以保持tf.contrib.learn的高度抽象的数据集、反馈、训练等。接下来,我们将展示如何实现TensorFlow中LinearRegressor相等的模型,而仅仅使用TensorFlow 低等级API知识。

为了使用tf.contrib.learn定义一个自定义模型,我们需要使用的tf.contrib.learn.Estimator和tf.contrib.learn.LinearRegressor事实上是tf.contrib.learn.Estimator的一个子类。这里传递给Estimator一个函数模型model_fn声明 tf.contrib.learn需要如何评估预测, 训练步骤和损耗,而不是使用子类。代码如下:

import numpy as np
import tensorflow as tf
# Declare list of features, we only have one real-valued feature
def model(features, labels, mode):
  # Build a linear model and predict values
  W = tf.get_variable("W", [1], dtype=tf.float64)
  b = tf.get_variable("b", [1], dtype=tf.float64)
  y = W*features['x'] + b
  # Loss sub-graph
  loss = tf.reduce_sum(tf.square(y - labels))
  # Training sub-graph
  global_step = tf.train.get_global_step()
  optimizer = tf.train.GradientDescentOptimizer(0.01)
  train = tf.group(optimizer.minimize(loss),
                   tf.assign_add(global_step, 1))
  # ModelFnOps connects subgraphs we built to the
  # appropriate functionality.
  return tf.contrib.learn.ModelFnOps(
      mode=mode, predictions=y,
      loss=loss,
      train_op=train)

estimator = tf.contrib.learn.Estimator(model_fn=model)
# define our data set
x = np.array([1., 2., 3., 4.])
y = np.array([0., -1., -2., -3.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)

# train
estimator.fit(input_fn=input_fn, steps=1000)
# evaluate our model
print(estimator.evaluate(input_fn=input_fn, steps=10))

结果为:

{'loss': 5.9819476e-11, 'global_step': 1000}

注意model()中的方法跟低等级的API的手写的循环训练的模型相似。

接下来

到这里就完成了对TensorFlow基本的学习,下面将学习TensorFlow更多的知识。 初学者查看: MNIST for beginners, 非初学者查看: Deep MNIST for experts.


version 0.1 finished 20170331

新手避坑指南:在MacBook上为PyTorch正确配置MPS环境,跑通第一个YOLOv8训练 本文详细指导新手如何在MacBook上为PyTorch正确配置MPS环境,并成功运行YOLOv8训练。从环境准备、PyTorch安装到YOLOv8配置和性能调优,提供全面的避坑指南和实用技巧,帮助开发者充分利用Mac的GPU加速能力。 阅读详情

相关推荐

西门子Industrial Copilot实战:5个工业场景下的AI效率提升案例

本文通过五个工业场景实战案例,深入解析西门子Industrial Copilot如何将工业智能转化为实际生产力。从自动化配置、预测性维护到能源优化与人机交互,这位AI助手显著缩短工程周期、提升设备可用率并降低运营成本,展示了其在工业领域系统化、工程化的落地价值。

3c4x5z6v7b的博客 928

TensorBoard的最全使用教程:看这篇就够了

机器学习通常涉及在训练期间可视化和度量模型的性能。有许多工具可用于此任务。在本文中,我们将重点介绍 TensorFlow 的开源工具套件,称为 TensorBoard,虽然他是TensorFlow 的一部分,但是可以独立安装,并且服务于Pytorch等其他的框架。 什么是 TensorBoard? TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括: 可视化模型的网络架构 跟踪模型指标,如损失和准确性等 检查

deephub 10万+

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 446

TensorBoard最全使用教程:看这篇就够了

TensorBoard最全使用教程:看这篇就够了

qq_41656402的博客 14万+

产品经理必备知识——API接口

在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如果你选择允许,app就会根据你的当前位置为你提供更加个性化的一些服务,当然也有一些app拿到你的位置信息做出损害用户利益的行为,所以还是需要谨慎授权。首先,看接口文档的场景一般是自身业务模块需要获取外部的数据,但又不想自己重新开发,寻找外部已经实现的有开放能力的供应商(包含企业内部的)。通过发送请求和响应消息的方式实现程序间的通信。

WBKJ_Noah_的博客 3457

在 FlexSim 中建 AGV 小车模型时,如果设定“每次充电需要 2 小时才能充满”,应该如何配置 AGV 的充电功能?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 881

详解Tensorboard及使用教程

目录一、什么是Tensorboard二、配置Tensorboard环境要求安装三、Tensorboard的使用使用各种add方法记录数据单条曲线(scalar)多条曲线(scalars)直方图(histogram)图片(image)渲染(figure)网络(graph)其他三、结语 一、什么是Tensorboard Tensorboard原本是Google TensorFlow的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在web上展示,对于观察神经网络的过程非常有帮助。PyTor

weixin_53598445的博客 5万+

【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。 下面就一起来看一下怎样做出这种效果吧!

努力前行,总会成为自己心中的那道光 1万+

tensorbroad的用法

import tensorflow as tf import numpy as np def add_layer(inputs, in_size, out_size, n_layer, activation_function=None): # add one more layer and return the output of this layer layer_name = ...

qq_41106162的博客 790

TIM 2024 | AD-YOLO:一种结合 Swin Transformer 和注意力机制的实时 YOLO 网络用于机场场景检测

实时获取机场场景信息对于保障机场安全和提升机场运营效率至关重要。然而,机场场景图像中的人员和车辆目标尺寸较小,而且公开的机场数据不足,这使得机场物体检测成为一项颇具挑战的任务,难以同时实现高精度和实时检测。本文提出了一种全新的机场物体检测方法——机场检测器YOLO(AD - YOLO),它融合了改进的你只看一次(YOLO)算法、Swin Transformer和注意力机制的优势,以应对这一挑战。

小白学视觉 315

面向干净核心的并行扩展:SAP BTP 上的 side-by-side extensions 全面解读

摘要: SAP的side-by-side extensions是一种与核心系统解耦的云原生扩展模式,通过API和事件驱动实现与SAP S/4HANA等核心系统的松耦合集成。该模式支持独立升级、弹性扩展和高效创新,是SAP官方推荐的clean core关键实现路径。其典型架构包括接口层(OData/REST API、事件通道)、运行层(Cloud Foundry/Kyma/CAP框架)和体验层(Fiori/UI5)。适用场景包括需快速迭代、复用云服务或服务外部用户的业务扩展。实施时需关注安全治理(如XSUAA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 305

06:Tensorflow的可视化工具Tensorboard的初步使用

标签(空格分隔): 王小草Tensorflow笔记 笔记整理者:王小草 笔记整理时间:2017年3月7日 代码原文请见github: 当使用Tensorflow训练大量深层的神经网络时,我们希望去跟踪神经网络的整个训练过程中的信息,比如迭代的过程中每一层参数是如何变化与分布的,比如每次循环参数更新后模型在测试集与训练集上的准确率是如何的,比如损失值的变化情况,等等。如果能在训练的过...

【人工智能】王小草的博客 16万+

灰质-白质组织对比(Gray-white matter tissue contrast,GWC)计算以及可视化

GWC是深层灰质与浅表白质(superficial white matter,SWM)之间T1加权信号强度的比值,已知髓鞘中的胆固醇是T1加权信号强度的主要影响因素,因此GWC大致反映了大脑皮层和浅表白质之间的髓鞘化差异。GWC代表灰白质交界处的模糊程度,较低的GWC表明灰质和白质交界处更相似和更模糊;较高的GWC表明灰白质分界更加清楚。据之前的研究报道,局灶性皮质发育不良、颞叶癫痫、帕金森病、强迫症、精神分裂症和自闭症谱系障碍中存在灰白质交界区GWC异常增高或降低。 灰质信号强度和白质信号强度采集的示意图

xxx 733

【从零开始深度学习】——1、初识Tensorflow

1、什么是Tensorflow Tensor:张量,或表示多维数组。对于不同维度下的定义不同:对于0矩阵,Tensor就是一个数“0”;而在一维情况下就是一维数组,高维情况下就是高维矩阵。 Flow:起飞的意思,体现TensorFlow的计算模型。 而TensorFlow的一切都是围绕图结构开始的。计算图是Tensorflow中最基本的概念,也是它有别于Numpy等python工具包之处。Tens...

锟金铐鏜鏜鏜 408

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【附原文:深度学习-开始Tensorflow】1.Getting Started With TensorFlow

谷歌的深度学习框架Tensorflow最近发布了1.0版本,于是开始自己边学习边翻译,希望能实现从0到1的突破

Lighting.Z 1035

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TensorFlow2.1.0安装教程

TensorFlow2.1.0安装教程安装步骤常用IDE安装CUDA安装CUDA软件安装cuDNN神经网络加速库安装配置环境变量TensorFlow安装 TensorFlow是一款优秀的深度学习框架,支持多种常见的操作系统,例如Windows10,Mac Os等等,同时也支持运行在NVIDIA显卡上的GPU版本以及仅使用CPU进行运算的CPU版本。此篇教程将介绍如何安装最新版TensorFlow框......

weixin_44170512的博客 7万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Win10深度学习tensorflow-gpu的环境安装

Win10深度学习tensorflow-gpu的环境安装1.安装Anaconda3(官网最新版即可)创建虚拟环境2.安装pycharm3.安装CUDA 10.03.安装CUDNN 7.3.13.安装tensorflow-gpu 1.15.0 1.安装Anaconda3(官网最新版即可) 创建虚拟环境 参考 https://c.lanmit.com/redianjishu/xunihua/1710...

qq_38720938的博客 173

Win10系统深度学习环境配置cuda9.0+cudnn7.1+Anaconda3.5+tensorflow1.10+opencv4.1

Win10下配置tensorflow的深度学习环境 电脑配置:win10系统+ GTX1080ti 安装前下载显卡驱动,CUDA9.0,CUDNN7.1,Anaconda3.5,Pycharm2018社区版 1.安装CUDA9.0 1)安装显卡驱动 https://radio.seu.edu.cn/2019/0604/c19196a276218/page.htm 2)安...

water_93的博客 589

TensorFlow和深度学习入门教程(TensorFlow and deep learning without a P

TensorFlow和深度学习入门教程(TensorFlow and deep learning without a P

qq_45058973的博客 168
上一篇: [DL]安装Tensorflow
下一篇: [python]一分钟了解关于python的类
android_ruben
博客等级 码龄11年 106粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值