20、深度学习在MNIST和足球数据集中的应用与调优

深度学习在MNIST和足球数据集中的应用与调优

1. MNIST数据集的默认深度学习模型

MNIST是一个模式识别问题,旨在判断一组784个像素代表的是0到9中的哪个数字,属于多项式分类问题。

1.1 模型设置与训练

首先,需要运行之前章节的示例代码来设置H2O、加载数据,并定义训练集、验证集、测试集以及输入和输出变量。然后,可以使用以下代码进行默认的深度学习训练:

Python代码
m = h2o.estimators.H2ODeepLearningEstimator(model_id="DL_defaults")
m.train(x, y, train, validation_frame=valid)
R代码
m <- h2o.deeplearning(x, y, train,
  model_id = "DL_defaults", validation_frame = valid)

训练过程大约需要三分钟多,会占用机器的所有八个核心。训练时会丢弃67个常量列,因此输入神经元变为717个,而不是原来的784个。

1.2 模型评估

使用 summary(m) (Python中为 m.summary() )可以查看每层的详细信息,以及均方误差(MSE)等指标,还有训练集和验证集的交叉验证表。

运行 h2o.performance(m, test) 可以得到测试集的性能指标。训练集的错误率为0.55%,验证集和测试集的错误率分别为3.32%和3.04%;训练集的MSE为0.005,验证集和测试集的MSE分别为0.028和0.027。这表明模型出现了过拟合问题。

1.3 训练和验证结果分析

通过Flow界面的截图(Figure 8 - 5)可以看到,训练数据的性能(蓝线)和验证集的性能(橙线)之间存在差距。这些图表还有以下特点:
- 图表会有波动,不要因为第一次上升就放弃。
- 对于验证线,对数损失(logloss)和MSE有明显差异,而训练线的差异较小。
- 图表末尾的上升或下降是因为 overwrite_with_best_model 参数为 true ,模型根据logloss判断最佳模型,在训练结束时会使用之前的最佳模型。

2. MNIST数据集的调优深度学习模型

2.1 增强数据的效果

使用增强数据(通过 load.mnist_enhanced.R 或 load.mnist_enhanced.py 加载),在默认设置下(10个周期),“原始”MNIST数据的验证集错误分别为417和390,而增强数据的验证集错误为317、313和292,有超过20%的提升,训练集错误的减少更为明显。这说明深度学习更容易对增强数据产生过拟合,但对未见过的数据也有显著的好处。

2.2 增加周期和设置早停

为了控制计算量,增加周期的同时设置早停:

stopping_metric = "misclassification",
stopping_tolerance = 0.01,
stopping_rounds = 3,
epochs = 500,
classification_stop = -1,

这些设置表示,在三个评分周期内错误分类的改善小于1%时停止训练,最多训练500个周期。 classification_stop 默认值为0,意味着模型在完美分类整个训练数据时停止学习,但实际上模型在达到这一状态后仍能提高验证分数,因此将其设置为 -1。

进行两次运行,模型分别在40和46个周期时触发早停。第一次运行在训练集上获得了完美分数,验证集错误分别为268和272,相比10个周期时又有17%的提升。

2.3 隐藏层和神经元数量的选择

考虑到模型需要从像素组中形成概念来判断数字,更多的隐藏层和足够的神经元可以帮助模型学习更多的概念。参考相关文章,最佳模型使用了1024、1024、2048个神经元。增加层间神经元数量而不是减少的一个实际原因是,输入神经元有898个,输出神经元只有10个,较少的权重意味着更快的训练时间。

2.4 超参数调优

为了解决训练数据的过拟合问题,进行了以下超参数的实验:
| 超参数 | 说明 | 实验值 |
| ---- | ---- | ---- |
| l1 | L1正则化,使模型更抗噪声 | 0(无正则化)和1e - 5 |
| input_dropout_ratio | 丢弃部分输入神经元 | 10%和20% |
| hidden_dropout_ratios | 隐藏层神经元的丢弃比例 | 0%、10%和50% |
| max_w2 | 仅用于4层网络 | 默认值(无穷大)和20 |

激活函数选择Rectifier(WithDropout),因为相关文章表明它比Maxout和Tanh更好,且速度更快。

由于不能在网格中同时实验隐藏层神经元的丢弃比例和隐藏层数量,所以网格搜索分三步进行:
1. 比较2个隐藏层的模型:200 x 200(221,600个权重)、512 x 512(727,040个权重)、1024 x 1024(1,978,368个权重)。
2. 尝试1个3层模型和另一个3层模型:400 x 800 x 800(1,327,200个权重)、1024 x 1024 x 2048(4,085,760个权重)。
3. 尝试2个4层模型:200 x 200 x 200 x 200(301,600个权重)、300 x 400 x 500 x 600(895,400个权重)。

最后添加的超参数是 seed ,仅用于区分不同的运行,因为H2O的深度学习实现即使使用相同的种子也不能保证得到相同的模型。

2.5 调优结果分析

调优结果表明, l1 = 0.00001 比 l1 = 0 要好得多,前13个最佳模型都使用了L1正则化。 max_w2 似乎没有效果, input_dropout_ratio 为0.1和0.2的差异不大。 hidden_dropout_ratios 比较复杂,最佳的4层模型使用了0.1,0.0的效果较差。

以下是最佳10个模型的验证错误、logloss、构建时间和周期数:
| 隐藏层 | 错误数(每10,000个) | Logloss | 时间 | 周期数 |
| ---- | ---- | ---- | ---- | ---- |
| 300,400,500,600 | 121 | 0.0701 | 796 | 210 |
| 1024,1024 | 124 | 0.0602 | 2079 | 410 |
| 1024,1024,2048 | 126 | 0.0720 | 3382 | 459 |
| 400,800,800 | 127 | 0.0673 | 1266 | 501 |
| 1024,1024 | 134 | 0.0655 | 1660 | 200 |
| 400,800,800 | 137 | 0.0646 | 1419 | 272 |
| 512,512 | 137 | 0.0634 | 943 | 476 |
| 1024,1024 | 150 | 0.0671 | 2249 | 240 |
| 300,400,500,600 | 161 | 0.0699 | 1037 | 501
|
| 300,400,500,600 | 167 | 0.0820 | 1099 | 501* |

虽然没有明确的最佳选择,但4层模型有最好的得分,因此选择4层模型进行最终训练。

2.6 最终模型

最终模型的代码如下:

DLt <- h2o.deeplearning(x, y, train, validation_frame = valid,
  model_id = "DL_tuned", seed = seed,
  hidden = c(300,400,500,600),
  activation = "RectifierWithDropout",
  l1 = 0.00001,
  input_dropout_ratio = 0.2,
  hidden_dropout_ratios = c(0.1, 0.1, 0.1, 0.1),
  classification_stop = -1,
  stopping_metric = "misclassification",
  stopping_tolerance = 0.001,
  stopping_rounds = 8,
  epochs = 2000
  )

该模型在机器上大约需要两小时构建,验证集分数为130,测试集错误为138,是目前表现最好的模型。模型最终使用了642个周期,但返回的是第275个周期的模型。

3. 足球数据集的默认深度学习模型

足球数据集根据近期表现和博彩赔率来预测足球比赛结果,数据存在大量噪声。人类专家在该数据集上的预测准确率仅为0.634,说明数据中的线索并不完整。

3.1 数据准备

如果在自己的机器上运行,需要运行之前章节的示例代码,确保加载的CSV文件中缺失数据已被移除或修补,即 football.train2.csv 、 football.valid2.csv 和 football.test2.csv 。运行这些代码会设置H2O、加载数据,并定义训练集、验证集、测试集、输入变量(包括有赔率和无赔率的情况)和输出变量。

3.2 模型构建与评估

构建两个版本的模型,分别尝试两种预测方式:
- 赛前球队实力估计 + 赛前博彩赔率
- 仅赛前球队实力估计

使用 compareModels() 函数来获取模型的指标,重点关注AUC和准确率。

R代码
m1 <- h2o.deeplearning(x, y, train,
  model_id = "DL_defaults_Odds",
  validation_frame = valid, seed = seed)
m2 <- h2o.deeplearning(xNoOdds, y, train,
  model_id = "DL_defaults_NoOdds",
  validation_frame = valid, seed = seed)

以下是AUC和准确率的结果:
| 数据集 | AUC(有赔率) | AUC(无赔率) | 准确率(有赔率) | 准确率(无赔率) |
| ---- | ---- | ---- | ---- | ---- |
| 训练集 | 0.647 | 0.607 | 0.612 | 0.586 |
| 验证集 | 0.672 | 0.630 | 0.648 | 0.617 |
| 测试集 | 0.645 | 0.606 | 0.624 | 0.601 |

结果表明模型性能一般,但没有明显的过拟合问题。验证集和测试集的结果比较接近,可能是因为验证集和测试集的数据更容易预测。

3.3 足球数据集调优思路

接下来将对足球数据集的模型进行调优,主要思路如下:
- 增加训练周期并设置早停机制,以提高模型性能。
- 尝试不同的隐藏层数量和神经元数量,找到最佳的网络拓扑结构。
- 引入dropout和正则化技术,减少过拟合。

3.4 增加训练周期和早停设置

首先尝试增加训练周期并设置早停机制,以提高模型性能。以下是第二个模型(无赔率)的代码:

m2es <- h2o.deeplearning(xNoOdds, y, train,
  model_id = "DL_ES_NoOdds",
  validation_frame = valid, seed = seed,
  replicate_training_data = TRUE,
  stopping_metric = "AUC",
  stopping_tolerance = 0.01,
  stopping_rounds = 3,
  epochs = 1000
  )

运行结果如下:
| 数据集 | AUC(有赔率) | AUC(无赔率) | 准确率(有赔率) | 准确率(无赔率) |
| ---- | ---- | ---- | ---- | ---- |
| 训练集 | 0.622 | 0.584 | 0.593 | 0.571 |
| 验证集 | 0.632 | 0.605 | 0.637 | 0.611 |
| 测试集 | 0.601 | 0.577 | 0.588 | 0.589 |

可以看到,增加训练周期后结果并不理想。从评分历史图表可以看出,随着模型对训练数据的学习越来越好,对验证数据的表现却越来越差。

3.5 隐藏层和神经元数量的实验

接下来考虑隐藏层的数量和神经元的数量。之前的默认模型使用了两个隐藏层,每个隐藏层有200个神经元。为了回答以下三个问题,尝试了三种不同的拓扑结构:
- 三个隐藏层是否比两个更好?
- 第一个隐藏层是否需要更多的神经元?
- 最后一个隐藏层是否需要更多的神经元?

尝试的拓扑结构分别为200x200x200、400x200和200x400。同时,考虑了dropout参数:
- input_dropout_ratio 设置为0.3,表示每次丢弃30%的输入。
- hidden_dropout_ratios 设置为0.5和0.3,表示第一个隐藏层丢弃50%的输出,后续层丢弃30%的输出。

激活函数选择 RectifierWithDropout ,并使用L1和L2正则化(均设置为0.0005),同时设置 balance_classes 和 shuffle_training_data 为 true 。

首先,使用上述参数对默认的两个隐藏层(每个200个神经元)的模型进行训练:

m2_200x200 <- h2o.deeplearning(xNoOdds, "HomeWin", train,
  model_id = "DL_200x200",
  validation_frame = valid, seed = seed,
  replicate_training_data = TRUE,
  balance_classes = TRUE,
  shuffle_training_data = TRUE,
  hidden = c(200,200),
  activation = "RectifierWithDropout",
  hidden_dropout_ratios = c(0.5, 0.3),
  input_dropout_ratio = 0.3,
  l1 = 0.0005,
  l2 = 0.0005,
  stopping_metric = "AUC",
  stopping_tolerance = 0.01,
  stopping_rounds = 3,
  epochs = 1000
  )

以下是不同模型的AUC和准确率比较:
| 模型 | AUC(训练集) | AUC(验证集) | 准确率(训练集) | 准确率(验证集) |
| ---- | ---- | ---- | ---- | ---- |
| 默认模型 | 0.607 | 0.630 | 0.586 | 0.617 |
| 增加周期模型 | 0.584 | 0.605 | 0.571 | 0.611 |
| Drop + Reg模型 | 0.594 | 0.630 | 0.568 | 0.619 |

可以看到,使用dropout和正则化后,验证集的结果有所改善。

3.6 不同拓扑结构的实验结果

继续使用不同的拓扑结构进行实验,包括200x200x200、200x400、400x200和400x400,并添加了200x200x200x200的实验。

AUC比较:
| 拓扑结构 | AUC(训练集) | AUC(验证集) |
| ---- | ---- | ---- |
| 200x200 | 0.594 | 0.630 |
| 200x200x200 | 0.597 | 0.631 |
| 200x400 | 0.591 | 0.633 |
| 400x200 | 0.598 | 0.629 |
| 400x400 | 0.595 | 0.630 |

准确率比较:
| 拓扑结构 | 准确率(训练集) | 准确率(验证集) |
| ---- | ---- | ---- |
| 200x200 | 0.568 | 0.619 |
| 200x200x200 | 0.571 | 0.621 |
| 200x400 | 0.563 | 0.618 |
| 400x200 | 0.570 | 0.615 |
| 400x400 | 0.565 | 0.618 |

结果显示,增加第一个隐藏层的神经元数量并没有明显帮助,增加第二个隐藏层的神经元数量也效果不大,但三个隐藏层似乎有轻微的帮助。而尝试四个隐藏层(200x200x200x200)时,结果非常糟糕,说明数据集中的噪声过多,无法训练四层网络。

3.7 最终模型

最终选择200x200x200的拓扑结构,并放宽早停标准,允许模型最多训练2000个周期,只要在四个评分周期内的改善不低于0.1%就继续训练。该模型将在测试数据上进行实验,预测主场获胜情况,并分别尝试有赔率和无赔率的数据。

综上所述,通过对MNIST和足球数据集的深度学习模型进行调优,我们可以看到不同的调优策略对模型性能的影响。在MNIST数据集中,使用增强数据、增加周期、设置早停机制以及合理选择隐藏层和神经元数量等方法可以有效提高模型性能;而在足球数据集中,由于数据噪声较大,需要更加谨慎地选择调优策略,避免过拟合。

4. 总结与展望

4.1 不同数据集调优策略总结

  • MNIST数据集 :增强数据对模型性能提升显著,能有效降低验证集和训练集的错误率。增加训练周期并结合早停机制,可在控制计算量的同时提高模型性能。合理选择隐藏层和神经元数量,以及进行超参数调优,如使用L1正则化、dropout等技术,能缓解过拟合问题,提升模型泛化能力。
  • 足球数据集 :数据噪声较大,增加训练周期可能导致训练集和验证集结果差异增大,出现过拟合现象。尝试不同的隐藏层和神经元数量时,三个隐藏层有轻微帮助,但四层网络因数据噪声过多而效果不佳。使用dropout和正则化技术能在一定程度上改善验证集结果。

4.2 未来调优方向

  • 数据层面 :对于MNIST数据集,可进一步探索数据增强的方法,如更多的图像变换操作,以提供更丰富的训练数据。对于足球数据集,可收集更多相关数据,如球员伤病情况、球队战术安排等,以减少数据中的不确定性。
  • 模型层面 :尝试更复杂的模型架构,如卷积神经网络(CNN)在MNIST数据集上可能会有更好的表现。对于足球数据集,可考虑引入循环神经网络(RNN)或长短时记忆网络(LSTM),以处理时间序列数据中的依赖关系。
  • 超参数调优 :使用更先进的超参数调优算法,如贝叶斯优化、遗传算法等,以更高效地找到最优超参数组合。

4.3 流程图总结

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A[数据准备]:::process --> B[默认模型训练]:::process
    B --> C{是否过拟合?}:::process
    C -- 是 --> D[调优策略]:::process
    C -- 否 --> E[评估模型]:::process
    D --> E
    E --> F{性能是否满足要求?}:::process
    F -- 是 --> G[最终模型应用]:::process
    F -- 否 --> D

这个流程图展示了深度学习模型从数据准备到最终应用的一般流程。首先进行数据准备,然后训练默认模型,判断是否存在过拟合问题。如果存在过拟合,则采取调优策略;如果不存在,则直接评估模型。评估后判断模型性能是否满足要求,若满足则应用最终模型,若不满足则继续调优。

4.4 关键技术点回顾

技术点 MNIST数据集 足球数据集
数据增强 有效降低错误率,提升模型性能 未提及相关操作
早停机制 控制计算量,避免过拟合 可尝试但需谨慎,可能导致训练/验证结果差异增大
隐藏层和神经元数量 合理选择可提升模型学习能力 三个隐藏层有轻微帮助,四层网络效果差
正则化和dropout 缓解过拟合,提升泛化能力 能改善验证集结果

通过对MNIST和足球数据集的深度学习模型调优实践,我们深入了解了不同数据集的特点以及相应的调优策略。在实际应用中,需要根据具体数据集的特点和问题,灵活选择合适的方法进行模型调优,以达到最佳的性能表现。未来,随着深度学习技术的不断发展,我们可以期待更多先进的方法和技术应用于这些数据集,进一步提升模型的性能和泛化能力。

相关推荐

AI原生应用架构设计:混合推理的模块化实现

在当今数字化浪潮中,AI原生应用正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到精准的医疗影像诊断,AI原生应用凭借其强大的智能处理能力,不断拓展着应用边界。而在这些应用背后,混合推理的模块化实现成为提升应用性能和灵活性的关键因素。想象一下,我们身处一个庞大的图书馆,里面摆满了各种各样的知识书籍(数据)。当我们想要寻找特定信息时,如果没有合理的检索系统(推理机制),就如同大海捞针。混合推理就像是一套智能的检索方法,它结合多种推理方式,能够快速、准确地找到我们需要的知识。

架构师的AI之路,分享AI应用开发架构的学习与实践。 395

第二十八课:深度学习及pytorch简介

Google的猫识别系统在观看千万级YouTube视频后,自己发现了"猫"这个概念,完全没人告诉它猫长什么样!PyTorch就像一辆跑车,不同配置下性能天差地别。:从今天开始,每天用PyTorch实现一个小功能!就像学做菜,从煎鸡蛋到满汉全席,关键是要动手实践。:PyTorch 2.0+已不再支持Python 3.6,就像新版PS5不兼容老式显像管电视。就像教小孩认动物,看多了自然就会,不需要解释"哺乳动物"的定义。:这个功能让PyTorch能自动计算神经网络中数百万参数的梯度!,支持GPU加速运算。

自学以强自身 993

24、机器学习模型调优与集成策略深度剖析

本文深入探讨了机器学习中多种模型的调优与集成策略,基于H2O平台在建筑能源、MNIST和足球三个数据集上对比了随机森林、GBM、GLM和深度学习模型的表现。文章详细分析了各模型的关键调优参数及其对性能的影响,展示了分类集成策略通过置信度加权提升预测准确性的实现方法。同时,探讨了数据增强、验证集利用及模型集成的优势,并指出了未来在深度学习优化、复杂集成方法和数据挖掘方面的研究方向,为实际应用中的模型性能提升提供了系统性参考。

lambda的博客 63

21、深度学习与无监督学习技术解析

本文深入解析了深度学习与无监督学习的关键技术,涵盖深度学习的早期停止标准、模型性能评估及复杂参数调优策略。通过实际案例展示了K-均值聚类和自动编码器在文本分析与降维中的应用,并探讨了无监督学习在数据压缩、异常检测和推荐系统中的潜力。同时,文章总结了参数选择的挑战与优化方法,并展望了未来深度学习与无监督学习的发展趋势。

lambda的博客 69

10、数据科学与H2O机器学习通用参数详解

本文详细介绍了H2O平台中常用的机器学习算法及其通用参数设置,涵盖随机森林、GBM、GLM和深度学习等模型。文章分析了不同数据集(如足球比赛、建筑能源、MNIST)的特点与挑战,并系统讲解了H2O中的核心参数,包括训练参数、验证机制、评分指标及提前停止策略。通过实际代码示例和流程图,展示了从数据准备到模型部署的完整迭代过程,帮助读者高效构建并优化机器学习模型。

lambda的博客 72

1、随机神经网络的一轮交叉验证与不确定性确定及其应用

本博文探讨了随机神经网络在数据科学和统计学领域的新趋势与应用,重点分析了极端学习机(ELM)在非线性回归和预测任务中的优势与挑战。通过交叉验证和不确定性区间构建的方法,有效应对随机网络的样本外性能随机性问题。结合光伏产量预测的实际案例,展示了随机神经网络在复杂场景中的应用价值。文章强调了统计学与机器学习的互补性,并展望了随机神经网络在未来多个领域的发展潜力。

yhn456789的博客 104

企业微信会话存档SDK集成与动态库加载实战

本文详细解析了企业微信会话存档SDK的集成与动态库加载实战,重点解决Windows与Linux环境下动态库加载的差异问题。通过实战案例和优化建议,帮助开发者高效完成企业微信API集成,确保合规存档功能稳定运行。

weixin_26934905的博客 464

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4677

LAMMPS ReaxFF模拟后处理:如何用Python精准追踪C-N键的断裂与形成?

本文详细介绍了如何利用Python对LAMMPS ReaxFF模拟结果进行后处理,精准追踪C-N键的断裂与形成过程。通过解析键级输出文件、构建原子类型映射字典,并实现C-N键的统计与可视化,为材料科学和催化反应研究提供了高效的数据分析解决方案。文章特别强调了ReaxFF力场在断键分析中的关键作用,并提供了完整的Python代码实现。

weixin_28706923的博客 355

CT探测器普遍采用“星形拓扑+多ADC模组”架构的TDC(时间数字转换器)设计方案

本文提出一种基于TDC反馈机制的CT探测器时钟同步方法,通过延时测量、偏差计算和动态补偿三步硬件流水线,实现高精度同步。系统采用Xilinx Kintex UltraScale FPGA内置CARRY8进位链构建3.5ps分辨率的TDC,结合多级比较器和延迟单元,形成闭环反馈控制。实验表明,在512通道、1.28m传输距离下,同步精度稳定在10ps以内,较传统方案提升两个数量级,并能动态补偿干扰抖动。该方案解决了传统方法在CT旋转腔体环境下精度不足的问题,为下一代超高清CT提供了有效的时钟同步解决方案。

whm128的博客 274

(11-3-01 )

以太坊(Ethereum)是一种基于区块链技术的开源平台和加密货币。它于2015年由Vitalik Buterin和Gavin Wood等开发者创建,并成为比特币之后最受欢迎的加密货币之一。以太坊不仅支持加密货币交易,还为开发者和企业提供了构建去中心化应用程序的强大工具。在本节的内容中,将实型一个完整的机器学习模型项目,智能检测出以太坊区块链中的非法账户。从问题定义到模型建立和评估,再到最终的总结和建议。本实例突出了处理类别不平衡问题的重要性,并展示了如何使用多种机器学习算法来解决实际问题。此外,通过数据可

码农三叔 2169

基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)

当前所设计的温室大棚种植监测系统基于STM32单片机开发,它能够对温室大棚内的温度、湿度、光照强度、土壤湿度、二氧化碳含量等环境参数进行实时监测,并将数据传输至OneNET云平台,实现了远程监测和管理。该系统具有体积小、功耗低、可靠性高等特点,适合在温室大棚等场合使用。

7870

【Unity实战】实现最完美最简单的UI适配方案,背景压缩或者拉伸变形解决方案,手机刘海屏适配,适配不同分辨率,不同尺寸,不同设备。

这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移动设备上会浪费比较大的显示面积。 unity不同设备UI变形? UI在不同设备上如何适配?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3648

uniapp [安卓苹果App端] - 实现支付宝支付功能+拉起支付宝app付款支付后返回跳转到原页面,详解uniApp如何唤起本机支付宝并跳转到支付页面全流程及示例源码(APP端支付宝支付,支持打包

全网最详细的uniapp支付宝支付教程,uniapp支付宝支付流程,uni-app项目在APP端使用支付宝支付功能,uniapp前端实现支付宝支付,uniapp中唤醒支付宝进行支付并返回app,uniApp调起支付宝支付失败报错,uniapp app端调支付宝支付接口,uniapp开发安卓App对接支付宝支付,uniapp苹果ios唤起支付宝支付,uniapp调用支付宝支付uniapp开发app-调用支付宝支付,uniapp开发安卓苹果app如何接入支付宝支付,UniApp中实现支付宝支付功能,支付报错,调

🏆 前端领域优质创作者 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 57、机械加工中的力控制与三维测量技术
下一篇: 21、深度学习与无监督学习技术解析
lambda
博客等级 码龄23年 49粉丝 1303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值