TensorFlow【极简】CNN

配置MaskRCNN环境超详细教程(win10/ubuntu 16.04+tensorflow1.5.0 GPU版) 本文从参考了诸多Tensorflow GPU和MaskRCNN配置的博客与教程,最终在多台不同的电脑上实现了配置。本文目的在于用预训练权重来完成MaskRCNN的demo的环境搭建。 一.工具1. win10平台 安装步骤本文不涉及2. ubuntu16.04平台 安装步骤本文不涉及(1.2可二选一)3.python 3.6官网:https://www.python.org 在download中可... 阅读详情

单层卷积神经网络

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

"""加载样本集:手写数字"""
mnist = input_data.read_data_sets('data/', one_hot=True)

"""卷积神经网络"""
# 输入层
X = tf.placeholder('float', [None, 28, 28, 1])  # 批量、高、宽、通道数
y = tf.placeholder('float', [None, 10])  # 10分类(0~9)

# 卷积层
W_conv = tf.Variable(tf.truncated_normal([5, 5, 1, 32], stddev=0.1))  # 高、宽、通道数、filter个数
b_conv = tf.Variable(tf.constant(.1, shape=[32]))  # filter个数
h_conv = tf.nn.conv2d(input=X, filter=W_conv, strides=[1, 1, 1, 1], padding='SAME') + b_conv  # 滑窗步幅:水平1、垂直1

# ReLU激活
h_relu = tf.nn.relu(h_conv)

# 池化层
h_pool = tf.nn.max_pool(h_relu, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')  # 滑窗大小:水平2、垂直2;滑窗步幅:水平2、垂直2

# 平化层
h_flat = tf.reshape(h_pool, [-1, 14 * 14 * 32])

# 全连接层1
W_fc1 = tf.Variable(tf.truncated_normal([14 * 14 * 32, 256], stddev=.1))  # 指定256个神经元
b_fc1 = tf.Variable(tf.constant(.1, shape=[256]))
h_fc1 = tf.matmul(h_flat, W_fc1) + b_fc1
h_fc1 = tf.nn.relu(h_fc1)

# 全连接层2
W_fc2 = tf.Variable(tf.truncated_normal([256, 10], stddev=.1))
b_fc2 = tf.Variable(tf.constant(.1, shape=[10]))
h_fc2 = tf.matmul(h_fc1, W_fc2) + b_fc2

# softmax交叉熵损失
loss = tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=h_fc2)

# Adam优化器
optimizer = tf.train.AdamOptimizer().minimize(loss)

"""精度"""
prediction = tf.equal(tf.argmax(h_fc2, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(prediction, 'float'))

"""运行"""
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
batch_size = 50
for i in range(501):
    batch = mnist.train.next_batch(batch_size)  # 分批
    inputs = batch[0].reshape([batch_size, 28, 28, 1])
    labels = batch[1]
    optimizer.run(session=sess, feed_dict={X: inputs, y: labels})  # 训练
    if i % 10 == 0:
        train_accuracy = accuracy.eval(session=sess, feed_dict={X: inputs, y: labels})
        print('step %d, accuracy %g' % (i, train_accuracy))

知识补充

1、图像特征

from skimage import data  # conda install pillow
import numpy as np, matplotlib.pyplot as mp
cat = data.chelsea()
print(cat.shape)  # 高、宽、通道:(300, 451, 3)
# RGB通道
cat_R = cat.copy()  # 红色通道
cat_R[:, :, 1] = cat_R[:, :, 2] = 0  # 绿、蓝通道像素设0
cat_G = cat.copy()  # 绿色通道
cat_G[:, :, 0] = cat_G[:, :, 2] = 0  # 红、蓝通道像素设0
cat_B = cat.copy()  # 蓝色通道
cat_B[:, :, 0] = cat_B[:, :, 1] = 0  # 红、绿通道像素设0
# 可视化
plot_image = np.concatenate((cat, cat_R, cat_G, cat_B), axis=1)
mp.imshow(plot_image)
mp.show()

在这里插入图片描述

2、mnist数据集

from tensorflow.examples.tutorials.mnist import input_data
import numpy as np, matplotlib.pyplot as mp
mnist = input_data.read_data_sets('data/', one_hot=True)
train_images = mnist.train.images  # shape(55000, 784)
train_labels = mnist.train.labels  # shape(55000, 10)
test_images = mnist.test.images  # shape(10000, 784)
testl_labels = mnist.test.labels  # shape(10000, 10)
# 可视化
for i in range(7):
    image = np.reshape(train_images[i, :], (28, 28))
    label = np.argmax(train_labels[i, :])
    mp.subplot(1, 7, i + 1)
    mp.axis('off')
    mp.imshow(image, cmap=mp.get_cmap('gray'))
    mp.title(label)
mp.show()

在这里插入图片描述

3、TensorFlow语法

  • 所有变量必须经过初始化才能启用
import tensorflow as tf
"""创建tf格式的变量"""
a = tf.Variable([[1], [2]])  # <tf.Variable 'Variable:0' shape=(2, 1) dtype=int32_ref>
b = tf.Variable([[1, 2, 3]])  # <tf.Variable 'Variable_1:0' shape=(1, 3) dtype=int32_ref>
c = tf.matmul(a, b)  # Tensor("MatMul:0", shape=(2, 3), dtype=int32)
print(a, b, c, sep='\n')
"""全局变量初始化"""
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print(sess.run(c))

4、模型评估

  • 完整CNN示例:2层卷积、再加上dropout
import tensorflow as tf, matplotlib.pyplot as mp
from tensorflow.examples.tutorials.mnist import input_data

"""加载样本集:手写数字"""
mnist = input_data.read_data_sets('data/', one_hot=True)

"""卷积神经网络"""
# 卷积、ReLU、池化
def conv(X, channels, filters):
    W_conv = tf.Variable(tf.truncated_normal([5, 5, channels, filters], stddev=0.1))
    b_conv = tf.Variable(tf.constant(.1, shape=[filters]))
    h_conv = tf.nn.conv2d(input=X, filter=W_conv, strides=[1, 1, 1, 1], padding='SAME') + b_conv
    h_relu = tf.nn.relu(h_conv)
    return tf.nn.max_pool(h_relu, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

# 输入层
X = tf.placeholder('float', [None, 28, 28, 1])
y = tf.placeholder('float', [None, 10])
# 2次卷积
h_pool1 = conv(X, 1, 32)
h_pool2 = conv(h_pool1, 32, 64)
# 平化层
h_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64])
# 全连接层1
W_fc1 = tf.Variable(tf.truncated_normal([7 * 7 * 64, 512], stddev=.1))
b_fc1 = tf.Variable(tf.constant(.1, shape=[512]))
h_fc1 = tf.nn.relu(tf.matmul(h_flat, W_fc1) + b_fc1)
# Dropout减少过拟合
keep_prob = tf.placeholder('float')
h_drop = tf.nn.dropout(h_fc1, keep_prob)
# 全连接层2
W_fc2 = tf.Variable(tf.truncated_normal([512, 10], stddev=.1))
b_fc2 = tf.Variable(tf.constant(.1, shape=[10]))
h_fc2 = tf.matmul(h_drop, W_fc2) + b_fc2
# softmax交叉熵损失
h_softmax = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=h_fc2))
# Adam优化器
optimizer = tf.train.AdamOptimizer().minimize(h_softmax)
# 精度
prediction = tf.equal(tf.argmax(h_fc2, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(prediction, 'float'))

"""运行和预测"""
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
batch_size = 50
for i in range(101):
    batch = mnist.train.next_batch(batch_size)
    inputs = batch[0].reshape([batch_size, 28, 28, 1])
    labels = batch[1]
    feed_dict = {X: inputs, y: labels, keep_prob: .9}
    optimizer.run(feed_dict, sess)
    if i % 10 == 0:
        loss = h_softmax.eval(feed_dict, sess)
        accu = accuracy.eval(feed_dict, sess)
        print('step %3d; loss %.2f; accuracy %g' % (i, loss, accu))
    if i == 100:
        real = tf.argmax(y, 1)
        realities = tf.argmax(y, 1).eval(feed_dict, sess)
        predictions = tf.argmax(h_fc2, 1).eval(feed_dict, sess)
        for i in range(8):
            mp.subplot(1, 8, i + 1)
            mp.axis('off')
            mp.imshow(inputs[i].reshape(28, 28), cmap=mp.get_cmap('gray'))
            mp.title('real %d; pred %d' % (realities[i], predictions[i]))
        mp.show()

step 0; loss 6.68; accuracy 0.22
step 10; loss 2.36; accuracy 0.32
step 20; loss 1.52; accuracy 0.58
step 30; loss 0.93; accuracy 0.76
step 40; loss 0.54; accuracy 0.8
step 50; loss 0.43; accuracy 0.88
step 60; loss 0.20; accuracy 0.98
step 70; loss 0.47; accuracy 0.86
step 80; loss 0.39; accuracy 0.92
step 90; loss 0.28; accuracy 0.92
step 100; loss 0.21; accuracy 0.96
在这里插入图片描述

5、注释

encn
convolution卷积
placeholder占位符
constant常量
stride步幅
optimize优化
truncate截短
MRI影像AI分析极简路径:DICOM处理到CNN分类实战 医学影像AI并非高不可攀的临床黑箱,其本质是图像数据处理与深度学习分类的技术组合。从DICOM格式解析、窗宽窗位校正,到TensorFlow构建轻量CNN模型,整个流程聚焦可复现、可调试的工程闭环。核心在于理解MRI像素值的物理含义(如RescaleIntercept/Slope)与医学图像特有的统计分布(非自然图像高斯分布),避免盲目套用标准归一化或BatchNorm。该路径适用于无医学背景的工程师快速验证想法,支撑脊柱、脑部等T1/T2加权图像的二类或多类判别,在科研预研、辅助标注、教学演示等场景中具备 阅读详情

相关推荐

深度学习之卷积神经网络CNN及tensorflow代码实现示例

一、CNN的引入在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×2828×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 ww 就有 784×15=11760784×15 = 11760 多个;若输入的

cxmscb的博客 22万+

Tensorflow入门四 CNN(极简主义)

很简单的CNN实现,依旧用mnist作为训练集与测试集 不懂看注释吧 上代码: #CNN #深度学习出现之前借助SIFT、HOG等算法提取良好特征,集合SVM等算法进行图像识别 #深度学习将特征提取和分类训练结合在一起,分类时自动提取特征 #CNN可以使用图像的原始像素作为输入 #神经认知机中包含两类神经元:S-cells和C-cells #S-cells对应主流卷积神经网络的卷积核

梦若幻城的博客 475

TensorFlow 实现卷积神经网络(CNN)

TensorFlow 实现卷积神经网络(CNN) 文章目录TensorFlow 实现卷积神经网络(CNN)1. 知识点:2. 出错点:3. 卷积层(Conv Layer)的输出张量(图像)的大小padding=’SAME‘ 填充0padding=’VALID‘ 不填充(需验证)4. 池化层(Conv Layer)的输出张量(图像)的大小padding=’SAME‘ 填充0在TensorFlow的(...

qq_34714751的博客 9759

精简CNN模型

精简CNN模型 一、MobileNet MobileNet V1理论:Depthwise Convolution + Pointwise Convolution https://blog.youkuaiyun.com/u014380165/article/details/72938047 MobileNet V2理论:Linear Bottlenecks + Inverted residuals https...

m0_37827994的博客 450

Python TensorFlow,卷积神经网络(CNN),手动实现卷积神经网络

普通的深层神经网络,层与层之间通过全连接进行稠密矩阵运算,矩阵中的权重系数比较多(参数多),影响效率且容易出现过拟合。 卷积神经网络的结构:卷积层、激活函数、池化层、全连接层。 卷积层:将原始图片通过Filter(过滤器,权重矩阵,卷积核,观察窗口),分割出局部信息,过滤器经过多次平移取样(步长)形成一个个局部信息然后组成卷积层,卷积层中的每一个单位点对应前面层的局部信息。(卷积的意义:一个点...

houyanhua1的专栏 3735

TensorFlow上实现卷积神经网络CNN

一、卷积神经网络CNN简介 卷积神经网络(ConvolutionalNeuralNetwork,CNN)最初是为解决图像识别等问题设计的,CNN现在的应用已经不限于图像和视频,也可用于时间序列信号,比如音频信号和文本数据等。CNN作为一个深度学习架构被提出的最初诉求是降低对图像数据预处理的要求,避免复杂的特征工程。在卷积神经网络中,第一个卷积层会直接接受图像像素级的输入,每一层卷积(滤波器)都会

marsjhao Blog 2295

Keras【极简】CNN

文章目录单层卷积神经网络详解1、内置数据集2、创建顺序模型 单层卷积神经网络 from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D from keras.optimizers import SGD from keras.datasets import cif...

ArYe 746

Tensorflow 中的卷积神经网络 (CNN)

这表明该模型可以很好地泛化到看不见的验证数据,尽管仍有改进的余地,特别是在缩小训练和验证准确性之间的差距方面。在本文中,我们将探讨 CNN 的基本构建块,并向您展示如何使用 TensorFlow 实现 CNN 模型。它在 CNN 的最后层用于进行预测。测试准确率为 70%,这对于简单的 CNN 模型来说是很好的,我们可以根据我们的任务优化模型来进一步提高其准确率。它用于对特征图进行下采样,即在保留最重要的信息的同时减小它们的大小。:添加一个具有 32 个过滤器的卷积层,每个过滤器的大小为 (3, 3)。

jianqimingtian的博客 832

使用自己的图片测试MNIST训练效果(TensorFlow1.5+CNN)

作为初学者研究了两周的TensorFlow基础的东西。首先是MNIST数据集在CNN的训练。中间经历了很多问题。现在TensorFlow的版本已经更新到1.5,出了很多高级API,所以很多博客都不再合适了。基于TensorFlow+anaconda在CNN训练MNIST之后,关于保存模型以及重新载入先关模型参数又折腾了一阵。原来老版本的方法,就是中文社区的MNIST训练之后使用保存数据,预测结果很...

zym_1990的博客 9881

[Python人工智能] 八.卷积神经网络CNN原理详解及TensorFlow编写CNN

从本专栏开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前一篇文章介绍了什么是过拟合,并采用droput解决神经网络中过拟合的问题,以TensorFlow和sklearn的load_digits为案例讲解;本篇文章详细讲解了卷积神经网络CNN原理,并通过TensorFlow编写CNN实现了MNIST分类学习案例。本专栏主要结合作者之前的博客、AI经验和相关视频介绍,后面随着深入会讲解更多的Python人工智能案例及应用。基础性文章,希望对您有所帮助~

杨秀璋的专栏 1万+

Bertopic库安装(二)

Bertopic库安装

weixin_43392789的博客 4895

深度学习实战:使用TensorFlow构建卷积神经网络(CNN)

卷积神经网络(CNN)是深度学习中一种非常重要的网络结构,广泛应用于图像识别、视频分析和自然语言处理等领域。CNN的核心思想是利用卷积层(Convolutional Layer)和池化层(Pooling Layer)自动提取图像的局部特征,从而减少人工特征工程的需求。

GGDxianv的博客 2712

facebook协议

支持同时登录多个Facebook账号,按照关键词采集小组地址,群发小组,批量添加推荐人,群发推 荐人消息,采集个人Facebook用户,群发用户私信,群发主页评论。通过客服台管理功能,和粉丝互动聊天,通过话术快捷回复,自动翻译聊天记录。通过FaceBook小组采集小组成员id,或者通过FaceBook个人主页,采集主页上粉丝批量操作已FaceBook账号添加推荐热,可以指定添加某个国家的推荐人,可以设置每个账号添加推荐人个数去重模式:所有的FaceBook账号不添加重复的推荐人。

2503_90751938的博客 967

TensorFlow搭建CNN卷积神经网络

TensorFlow搭建CNN卷积神经网络 该教程采用TernsorFlow搭建CNN卷积神经网络,并利用MNIST数据集进行数字的手写识别

段星星的博客 4891

R语言计算植物群落重要值:从基础概念到优势种判定

在植被生态学研究中,重要值是衡量物种在群落中地位的核心指标,它综合了相对多度、相对频度与相对显著度三个维度,能够客观反映物种的数量优势、分布广度与空间占据能力。理解重要值的生态学逻辑,是开展群落分类、优势种判定及多样性分析的基础。而R语言凭借其批量处理、可复现和与后续多元统计无缝衔接的优势,成为生态学研究者处理样方数据的高效工具。从野外记录的宽表到标准化长表,再到分组汇总计算相对指标,R语言能够显著提升数据处理效率与准确性。本文以实测群落数据为例,系统梳理重要值的两种算法口径、基于dplyr和tidyr的完

weixin_42634811的博客 269

把 NAST 变成你的遥控器:用 ABAP 程序精确触发与处理 Output Type

摘要 SAP中的Message Control机制通过NAST表记录输出状态,支持自动触发打印、邮件等操作。关键步骤包括: 构造NAST记录:定义输出类型、介质、处理状态等参数 调用处理函数:使用RV_MESSAGE_UPDATE_SINGLE更新表,通过WFMC_MESSAGES_PROCESS执行输出 典型应用场景: 单据补发(如PO邮件重发) 外部系统集成触发输出 故障恢复处理积压消息 注意事项: 需提交事务确保更新生效 区分S/4HANA新旧输出体系 正确处理派发时间(VSZTP)和状态(VSTAT

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

tensorflow之简单卷积神经网络(CNN)搭建

本篇文章采用cnn搭建来实现对mnist数据集的分类,增加了卷积运算。

xuan_zizizi的博客 1万+

Win11 1 月更新黑屏循环故障技术分析与解决方案

2026年1月30日Windows 11更新引发黑屏循环故障,主要影响2018年前出厂、采用MBR分区及特定BIOS固件的设备,尤其对使用经典版Outlook(POP协议)的用户影响显著。故障表现为系统无限重启黑屏,导致数据访问中断。分析表明,问题源于硬件兼容性、分区格式与系统更新的交互冲突。解决方案包括进入安全模式回滚更新、暂停自动更新、升级驱动/BIOS,以及等待微软官方补丁。建议用户更新前评估硬件兼容性并备份数据,企业环境应建立分阶段更新测试机制。该事件为系统更新风险管理提供了重要参考。

博客 1444

基于Tensorflow和Keras实现卷积神经网络CNN

文章目录一、环境的配置二、神经网络CNN的介绍三、数据集的准备四、猫狗分类的实例五、参考资料 一、环境的配置 安装Anaconda 详细步骤请参考下面链接: 配置TensorFlow、Keras ①创建一个新的 二、神经网络CNN的介绍 三、数据集的准备 四、猫狗分类的实例 五、参考资料 ...

Harriet的博客 6539

GoAnywhere MFT 身份验证绕过漏洞(CVE-2024-0204)

GoAnywhere MFT 身份验证绕过漏洞(CVE-2024-0204)

weixin_43567873的博客 389

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3194

卷积神经网络CNN结构及TensorFlow实现

目录 一、卷积神经网络CNN的结构 1、卷积层CONV 2、池化层POOL 3、全连接层FC 4、CNN常见架构 二、使用tensorflow Estimator构建CNN MNIST分类器 1、CNN模型函数 2、训练和评估CNN分类器 一、卷积神经网络CNN的结构 卷积神经网络通常包含卷积层、池化层和全连接层,下面是利用CNN对图片分类的结构图示例: 1、卷积...

woniu201411的博客 2466

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5109

使用tensorflow构建卷积神经网络(CNN)

,每一个特征平面由一些矩形排列的神经元组成,同一特征平面的神经元共享权值,这个共享权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。卷积神经网络分为了三部分,第一部分为输入层,第二部分由若干个卷积层和池化层 组成,第三部分为一个全连接的多层感知分类器构成。注意:Layer L1 为输入层,L2为隐含层,L3为输出层,h(x)为假设函数。设置我们的权重和偏移,损失函数,梯度下降,初始化参数,初始化模型保存。这一步,我们声明了一些神经网络的参数。

毕业作品网站 3512

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用 TensorFlow 进行图像处理:深度解析卷积神经网络(CNN)

卷积神经网络(CNN,Convolutional Neural Networks)是深度学习中的一种前馈神经网络,特别适合处理具有类似网格结构的数据,如图像。CNN 主要由卷积层、池化层、全连接层等组成。它通过局部连接、权重共享和池化等技术,有效地减少了计算量,并能够提取数据的层次化特征。本文详细讲解了如何使用 TensorFlow 构建一个卷积神经网络(CNN)模型,并应用于图像分类任务。

一碗黄焖鸡三碗米饭的博客 1675

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用 TensorFlow 实现 CNN(卷积神经网络)

卷积神经网络是由多个卷积层、池化层、全连接层以及激活函数组成的神经网络。CNN的最大特点就是它能够通过卷积层提取输入数据的局部特征,并通过多层卷积处理这些特征,最终达到高效的模式识别。卷积神经网络(CNN)是图像处理领域的核心技术,具有强大的特征提取能力。在本文中,我们从CNN的基础概念讲解开始,逐步深入到使用TensorFlow实现CNN,并通过MNIST数据集演示了如何进行图像分类。最后,我们展示了如何使用更复杂的网络结构,如VGG和ResNet,来处理更具挑战性的任务。

一碗黄焖鸡三碗米饭的博客 1163
上一篇: numpy【极简】RNN
下一篇: Keras【极简】CNN
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值