-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
712 lines (512 loc) · 77.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 6.3.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">
<script id="hexo-configurations">
var NexT = window.NexT || {};
var CONFIG = {"hostname":"example.com","root":"/","scheme":"Muse","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
</script>
<meta name="description" content="本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。">
<meta property="og:type" content="website">
<meta property="og:title" content="派大星去抓水母啦(:≡">
<meta property="og:url" content="http://example.com/index.html">
<meta property="og:site_name" content="派大星去抓水母啦(:≡">
<meta property="og:description" content="本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="HeyDream">
<meta property="article:tag" content="DeepLearn、ASR、NPL...">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="http://example.com/">
<script id="page-configurations">
// https://hexo.io/docs/variables.html
CONFIG.page = {
sidebar: "",
isHome : true,
isPost : false,
lang : 'zh-CN'
};
</script>
<title>派大星去抓水母啦(:≡</title>
<noscript>
<style>
.use-motion .brand,
.use-motion .menu-item,
.sidebar-inner,
.use-motion .post-block,
.use-motion .pagination,
.use-motion .comments,
.use-motion .post-header,
.use-motion .post-body,
.use-motion .collection-header { opacity: initial; }
.use-motion .site-title,
.use-motion .site-subtitle {
opacity: initial;
top: initial;
}
.use-motion .logo-line-before i { left: initial; }
.use-motion .logo-line-after i { right: initial; }
</style>
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="container use-motion">
<div class="headband"></div>
<header class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<h1 class="site-title">派大星去抓水母啦(:≡</h1>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger">
</div>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="main-menu menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>
</li>
</ul>
</nav>
</div>
</header>
<div class="back-to-top">
<i class="fa fa-arrow-up"></i>
<span>0%</span>
</div>
<main class="main">
<div class="main-inner">
<div class="content-wrap">
<div class="content index posts-expand">
<article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
<link itemprop="mainEntityOfPage" href="http://example.com/2022/12/07/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9C%A8%E7%9F%B3%E6%B2%B9%E5%8B%98%E6%8E%A2%E5%BC%80%E5%8F%91%E9%A2%86%E5%9F%9F%E7%9A%84%E5%BA%94%E7%94%A8%E7%8E%B0%E7%8A%B6%E4%B8%8E%E5%8F%91%E5%B1%95%E8%B6%8B%E5%8A%BF/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="HeyDream">
<meta itemprop="description" content="本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="派大星去抓水母啦(:≡">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2022/12/07/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9C%A8%E7%9F%B3%E6%B2%B9%E5%8B%98%E6%8E%A2%E5%BC%80%E5%8F%91%E9%A2%86%E5%9F%9F%E7%9A%84%E5%BA%94%E7%94%A8%E7%8E%B0%E7%8A%B6%E4%B8%8E%E5%8F%91%E5%B1%95%E8%B6%8B%E5%8A%BF/" class="post-title-link" itemprop="url">人工智能在石油勘探开发领域的应用现状与发展趋势</a>
</h2>
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2022-12-07 13:43:20 / 修改时间:17:17:18" itemprop="dateCreated datePublished" datetime="2022-12-07T13:43:20+08:00">2022-12-07</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-folder"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/OtherPaper/" itemprop="url" rel="index"><span itemprop="name">-OtherPaper</span></a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h2 id="人工智能在石油勘探开发领域的应用现状与发展趋势——简化版"><a href="#人工智能在石油勘探开发领域的应用现状与发展趋势——简化版" class="headerlink" title="人工智能在石油勘探开发领域的应用现状与发展趋势——简化版"></a>人工智能在石油勘探开发领域的应用现状与发展趋势——简化版</h2><h3 id="1-引言"><a href="#1-引言" class="headerlink" title="1. 引言"></a>1. 引言</h3><p> 随着大数据的增长、深度学习技术的出现以及算力提升,人工智能已呈现井喷式的发展。目前中国室友资源品味呈劣质化的趋势,为维护国家经济稳定和石油安全,国内石油勘探开发的力度仍需进一步加大。全球科技正朝着数字化、信息化、智能化方向迅速发展,油气勘探开发智能化已经成为行业前沿热点和发展趋势,有望大幅度提高油气勘探开发作业效率和质量,降低成本和风险,提升复杂油气藏的勘探开发水平。</p>
<p> 本文阐述人工智能在测井、物探、钻完井、油藏工程、地面工程 5 个领域的研究进展与应用情况,探讨并展望未来人工智能的应用重点与发展趋势。</p>
<h3 id="2-石油公司人工智能发展现状"><a href="#2-石油公司人工智能发展现状" class="headerlink" title="2. 石油公司人工智能发展现状"></a>2. 石油公司人工智能发展现状</h3><p> 国际石油公司通过与 IT 公司联手开展业务智能化探索,实现上游勘探开发业务的智能化,产生了道达尔+谷歌云、雪佛龙+微软、壳牌+惠普等跨界组合。表 1 展示了全球重点石油公司及油服公司的人工智能发展战略。</p>
<p><img src="/2022/12/07/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9C%A8%E7%9F%B3%E6%B2%B9%E5%8B%98%E6%8E%A2%E5%BC%80%E5%8F%91%E9%A2%86%E5%9F%9F%E7%9A%84%E5%BA%94%E7%94%A8%E7%8E%B0%E7%8A%B6%E4%B8%8E%E5%8F%91%E5%B1%95%E8%B6%8B%E5%8A%BF/%E5%85%A8%E7%90%83%E9%87%8D%E7%82%B9%E7%9F%B3%E6%B2%B9%E5%85%AC%E5%8F%B8%E5%8F%8A%E6%B2%B9%E6%9C%8D%E5%85%AC%E5%8F%B8%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%8F%91%E5%B1%95%E6%88%98%E7%95%A5%E5%AF%B9%E6%AF%94.png" alt="1670394249244"></p>
<p> BP 风头公司研发具有类似人类推理能力的人工智能平台,旨在提高决策速度,管理运营风险,实现决策过程自动化。</p>
<p> 道达尔与谷歌签署协议,合作探索油气勘探和开发的智能化解决方案,聚焦地下成像的智能化处理与解释,特别是地震数据的处理解释,以提高勘探和评价油气田的效率。</p>
<p> 壳牌与微软合作共同开发 Geodesic 平台,旨在提高水平井定向控制的准确性和一致性,以精确钻入油气含量最高的地层。该解决方案可简化钻探数据处理算法,从而做出实时决策并更好地预测结果。</p>
<p> 中国石油天然气集团有限公司(简称中国石油)启动建设了认知计算平台(E8)由中国石油科技管理部牵头开展了人工智能顶层设计,全面推动人工智能技术的探索性落地。</p>
<p> 中国石油化工集团有限公司(简称中国石化)于2012 年开始开展智能制造探索工作,陆续启动了智能工厂、智能油田、智能化研究院的规划、设计和建设工作,并建成油田智云工业互联网平台,将新一代信息技术与企业业务深度融合,推动了企业数字化转型升级。</p>
<p> 中国海洋石油集团有限公司(简称中国海油)在2020 年 3 月正式下发《集团公司数字转型顶层设计纲要》,提出数字化转型总体蓝图,打造智能油田技术平台,重点致力于智能油田建设和勘探开发数据治理。</p>
<h3 id="3-人工智能在石油勘探开发中的应用现状"><a href="#3-人工智能在石油勘探开发中的应用现状" class="headerlink" title="3. 人工智能在石油勘探开发中的应用现状"></a>3. 人工智能在石油勘探开发中的应用现状</h3><h4 id="3-1-测井领域"><a href="#3-1-测井领域" class="headerlink" title="3.1. 测井领域"></a>3.1. 测井领域</h4><h5 id="3-1-1-测井数据采集"><a href="#3-1-1-测井数据采集" class="headerlink" title="3.1.1 测井数据采集"></a>3.1.1 测井数据采集</h5><ul>
<li><p><strong>国外</strong>石油企业在数据采集、远程测井等方面已形成商用的产品。斯伦贝谢的远程测井中心、智能地层测试、具备智能处理解释能力的井筒软件 Techlog 等已经商用。</p>
</li>
<li><p><strong>国内</strong>方面,部分石油企业和科研机构已经针对网络化地面、智能绞车、远程测井等相关核心技术进行攻关,并已开始小批量应用。智能化井下机器人已经启动研发。</p>
<h5 id="3-1-2-测井处理解释"><a href="#3-1-2-测井处理解释" class="headerlink" title="3.1.2 测井处理解释"></a>3.1.2 测井处理解释</h5></li>
</ul>
<p> <strong>难点</strong>:测井数据具有数据体量大和多源异构等特点,测井处理解释过程中面临多解性、不确定性等难点,油 气判识难度越来越大。</p>
<p> <strong>解决</strong>:采用人工智能等技术来提高工作效率和解释符合率。</p>
<p> <strong>智能曲线重构</strong>是利用深度学习、关联分析等算法寻找测井曲线之间的关联性,对错误的、不恰当的、缺失的测井曲线进行数据重造。张东晓等提出了一种基于<strong>循环神经网络(RNN)即长短期记忆神经网络(LSTM)</strong>来重构测井曲线的方法,采用真实测井曲线进行验证后发现与传统方法相比精度更高。</p>
<p> <strong>岩性识别</strong>有两种途径,第 1 种是钻井取心,基于岩心样本分析判定岩性;第 2 种是通过测井曲线来识别岩性。</p>
<ul>
<li>对于第1种途径,目前更多依赖于人工鉴定,智能化水平偏低。</li>
<li>对于第2种途径,江凯等利用<strong>提升树、决策树、支持向量机</strong>等算法,将专家解释后的测井数据作为训练样本,构建岩性预测模型,与录井岩性相比,预测准确率达到 80%以上。</li>
</ul>
<p> <strong>成像测井</strong>主要是通过色度标定原理将原始测井曲线转换为反映地质特征的可视化图像。随着深度学习的发展,实现了成像测井的自动化解释。Ren 等利用 U-Net 等<strong>图像分割算法</strong>实现电成像测井图像地质特征边缘的自动识别,然后利用特征工程提取相关特征,最后基于机器学习算法实现地质特征的自动化分类。</p>
<p> <strong>问题</strong>:缺少可供机器学习的标签数据。</p>
<h5 id="3-1-3-一体化软件"><a href="#3-1-3-一体化软件" class="headerlink" title="3.1.3 一体化软件"></a>3.1.3 一体化软件</h5><p> <strong>国外</strong>,以斯伦贝谢为代表,以 Petrel、Techlog、Eclipse 等 10 多项软件为核心,构建了数字化协同智能工作流程,降低了勘探开发的不确定性与风险。勘探开发认知一体化平台(DELFI)建立了智能处理解释工作流程,支持数据标准化、数据清洗、智能解释、成 果提交等功能。井筒软件 Techlog 包括曲线敏感因素分析、预测与分类、曲线重建等系列智能化功能模块,支持智能解释。</p>
<p> <strong>国内</strong>,建成中国石油梦想云协同平台、测井处理解释一体化软件 LEAD 与全新一代多井评价软件CIFlog 等应用平台,油藏描述与模拟、测井多井解释等方面的智能化应用初见成效,水平井地质导向系统初步形成。</p>
<h4 id="3-2-物探领域"><a href="#3-2-物探领域" class="headerlink" title="3.2 物探领域"></a>3.2 物探领域</h4><h5 id="3-2-1-物探装备"><a href="#3-2-1-物探装备" class="headerlink" title="3.2.1 物探装备"></a>3.2.1 物探装备</h5><p> 物探数据采集<strong>智能无人机</strong>可实现高精度地形探测、风险评估、节点监控、数据回收、物 资投送、救援等作。地震仪器方面已研发出 G3i(有线)、Hawk(节点)、eSeis(节点)等产品,OBN(海底采集节点)技术攻关解决了拖缆跨障能力差、观测 方位窄、海面噪声强、单分量接收等局限。</p>
<h5 id="3-2-2-物探采集"><a href="#3-2-2-物探采集" class="headerlink" title="3.2.2 物探采集"></a>3.2.2 物探采集</h5><p> 物探采集技术已经实现从传统地震队向数字化地震队的转变,数字地震队将物联网、云计算等 IT 技术与物探采集方法相融合,对施工任务、野外人员、装备、HSE 等进行无线化、可视化数字管理,优化施工工序,简化作业程序,实现智能激发、实时质量控制、远程技术支持与指挥调度。</p>
<h5 id="3-2-3-地震数据处理与解释"><a href="#3-2-3-地震数据处理与解释" class="headerlink" title="3.2.3 地震数据处理与解释"></a>3.2.3 地震数据处理与解释</h5><p> 在<strong>地震数据处理与解释</strong>方面,人工智能主要应用在地震构造解释(含断层识别、层位解释、岩丘顶底解释、河道或溶洞解释等)、噪声压制与信号增强、地震相识别、储集层参数预测、地震波场正演、地震反演、地震速度拾取与建模、初至拾取、地震数据重建与插值、地震属性分析、微地震数据分析、综合解释 等方面。使用的核心技术主要是<strong>计算机视觉领域的目标检测、分割、图像分类与预测</strong>等。人工智能的应用在保证准确率的前提下,极大地提高了地震数据处理解释的效率。</p>
<p> 近几年,基于深度学习的<strong>地震相识别</strong>方面的研究也逐渐增多。传统的地震相识别主要是对地震属性先聚类,再对地震波形分类,以识别地震相。随着机器学习等人工智能技术的发展与应用,越来越多的研究者<strong>CNN、RNN、PNN、DNN、GAN</strong>等直接用于地震波形的分类识别。Zhang 等提出了一种**基于 Google 开发的增强型编解码结构 DeepLabv3+**,相比 CNN 模型和简单的语义分割模型(如反褶积神经网络),这种编解码结构在提取多尺度语义信息和恢复预测结果中更多像素级细节方面具有更高的精度和效率,有望提高地震相识别的精度和效率。</p>
<p> <strong>地震反演</strong>主要是将常规的界面型反射剖面转换成岩层型的测井剖面,把地震资料变成可与测井资料直接对比的形式。近年来,人工智能技术在此领域的应用研究进展较大,采用的算法以<strong>CNN、RNN、DNN、波尔兹曼机和 GAN</strong> 等为主。</p>
<p> <strong>初至拾取</strong>是后续地震处理和成像的基础。随着地震数据量的急剧增长,人工采集是最耗时的方法。为了应对这些挑战,需要开发稳健的自动拣选方法。Ma等提出了一种利用改进的<strong>二维像素卷积网络自动提取初至波</strong>的方法。将事件拾取问题转化为二值化图像分割问题,将第 1 次到达前后的信号分别标记为 1 和 0。利用钻孔地震资料进行了现场实例分析,证明了该方法的有效性和与传统自动拾取方法相比的优越性。</p>
<h4 id="3-3-钻完井领域"><a href="#3-3-钻完井领域" class="headerlink" title="3.3 钻完井领域"></a>3.3 钻完井领域</h4><h5 id="3-3-1-智能钻完井关键技术"><a href="#3-3-1-智能钻完井关键技术" class="headerlink" title="3.3.1 智能钻完井关键技术"></a>3.3.1 智能钻完井关键技术</h5><p> 智能钻完井关键技术包括井眼轨道智能优化、智能导向钻井、钻速智能优化等。以<strong>地质工程</strong>的多源数据为基础的<strong>井眼轨道智能优化技术</strong>一般采用<strong>遗传算法、神经网络</strong>等人工智能算法实现井眼方位角等相关<strong>参数优化</strong>。<strong>智能导向钻井技术</strong>的核心是利用人工智能算法,通过对目标井眼轨迹的实时监控和分析,并采用随钻地震技术、近钻头测量技术等钻井新技术,实现钻井过程的随钻预测及自动控制。<strong>钻速智能优化</strong>方面,大多采用大数据和智能优化算法对多目标钻井参数进行优化,使地层-钻头-参数三者之间达到最佳匹配,实现井斜、方位等参数动态优化设计,与钻机联动,自动发出操控指令,从而智能优化机械钻速。常用的算法包括<strong>随机森林、人工神经网络、蚁群算法、粒子群算法</strong>等。</p>
<h5 id="3-3-2-智能化钻完井装备"><a href="#3-3-2-智能化钻完井装备" class="headerlink" title="3.3.2 智能化钻完井装备"></a>3.3.2 智能化钻完井装备</h5><p> <strong>国外</strong>石油公司在地面装备方面,已经开始规模化应用钻台机器人、起下钻自动控制、自动送钻系统、自动控压钻井、钻井液在线监测等技术。</p>
<p> <strong>国内</strong>研制了自动化钻机,基本实现了管柱自动化控制;<strong>问题</strong>,传感器对部分状态检测的可靠性和有效性、设备在线预警与诊断准确性有待提升,液压驱动设备自身运动精度不高,智能化程度整体偏低。</p>
<h5 id="3-3-3-智能钻完井软件"><a href="#3-3-3-智能钻完井软件" class="headerlink" title="3.3.3 智能钻完井软件"></a>3.3.3 智能钻完井软件</h5><p> <strong>国内</strong>智能钻完井软件研发刚刚起步,基本具备钻完井设计、监测优化等功能,但由于数据标准不统一, 信息共享不畅,物理模型与机器学习算法交叉融合度低等原因,在准确性、全面性和现场适用性方面需要改进。</p>
<p> <strong>国外</strong>技术成熟。</p>
<h4 id="3-4-油藏工程领域"><a href="#3-4-油藏工程领域" class="headerlink" title="3.4 油藏工程领域"></a>3.4 油藏工程领域</h4><p> <strong>油藏动态分析与模拟</strong></p>
<p> 油藏工程主要是通过油藏数值模拟和油藏工程方法两种方式来实现动态分析和模拟。</p>
<p> <strong>水驱开发实时调控</strong>方面,主要是利用<strong>最优化、数据挖掘</strong>等技术来优化生产参数。贾德利等在动态观测数据的约束下,采用传统的数值模拟及优化算法,通过自动识别分层注采流动关系来计算区块分层注采井间的流动关系。</p>
<p> <strong>产量预测</strong>方面,部分学者利用<strong>RNN</strong>,将油藏静态参数、动态参数以及生产参数作为输入,预测累计产油量/产液量。王洪亮等以油田生产的历史数据为基准,同时考虑到产量指标与其影响因素之间 的联系以及产量随时间变化趋势和前后关联,利用深度学习领域中的<strong>长短期记忆神经网络(LSTM)</strong>来构建 相应的油田产量预测模型,以达到预测油田特高含水期产量的目标。</p>
<p> <strong>饱和度预测</strong>方面,Tariq 等采用<strong>差分进化</strong>(DE)、<strong>粒子群优化</strong>(PSO)和<strong>协方差矩阵自适应进化策略</strong> (CMAES) 等优化算法对<strong>功能网络</strong>( Functional Network)模型进行了优化。。Shahkarami 等采用神经网络技术开发并验证用于油藏模拟历史拟合、敏感性分析和不确定性评估的智能代理模型。通 过对两个油藏案例的分析,验证了模型在产量、油藏 压力和相饱和度等方面有较好的预测效果,并可以提高运算速度。</p>
<p> 总体而言,国内在油气田地面工程的智能化方面与国外尚有差距,亟待继续完善和商业化,解决瓶颈问题。</p>
<h3 id="4-人工智能在石油勘探开发领域应用时面临的挑战与发展方向"><a href="#4-人工智能在石油勘探开发领域应用时面临的挑战与发展方向" class="headerlink" title="4. 人工智能在石油勘探开发领域应用时面临的挑战与发展方向"></a>4. 人工智能在石油勘探开发领域应用时面临的挑战与发展方向</h3><p> 企业数字化转型发展是借助物联网、云计算、大数据、人工智能、区块链等信息技术,前端实现自动采集、自动传输、实时感知,中端实现安全存储、实时监视、集中管控,后端实现智能分析、数据共享与技术支撑。前、中、后端的一体化协同、高效联动与数据共享,快速推动了传统业务流程重构与工作方式变革。<strong>人工智能在其中发挥了中枢纽带作用。</strong></p>
<p> 人工智能技术有望突破石油勘探开发面临的瓶颈问题,实现管理模式由传统竖向独立管理向一体化协同运行、扁平化管理模式转变,重构业务流程,实现提质、降本、增效,助力企业的数字化转型发展。<strong>人工智能技术主要从以下几个方面对传统业务流程进行重构:</strong></p>
<ul>
<li><p>一是自动化数据采集设备,为油气勘探开发提供实时动态数据;</p>
</li>
<li><p>二是智能化分析处理软件,提高人工解释处理的效率,减少对专家经验的依赖度,优化 人力资源,节省人工成本;</p>
</li>
<li><p>三是无人机、电子巡检代 替人工作业,实现无人值守,提高员工幸福指数;</p>
</li>
<li><p>四是安全预警,实现事前控制,减小问题发现及信息传递的时间,降低生产维护成本;</p>
</li>
<li><p>五是生产动态管理,提升应急处置能力,减小产量损失。</p>
<h4 id="4-1-人工智能在石油勘探开发领域应用时面临的问题与挑战"><a href="#4-1-人工智能在石油勘探开发领域应用时面临的问题与挑战" class="headerlink" title="4.1 人工智能在石油勘探开发领域应用时面临的问题与挑战"></a>4.1 人工智能在石油勘探开发领域应用时面临的问题与挑战</h4><ol>
<li><p>系统或装备的升级导致数据的丢失等问题。</p>
</li>
<li><p>人工智能要达到工业级应用需要高质量的数据,以及恰当的模型。</p>
</li>
<li><p>客观方面:储集层的非均质性导致石油地质问题具有多解性、不确定性,难以获得供机器学习的“教材”(标签数据),而高质量的标签数据是人工智能技术实现工业化应用的关键。</p>
</li>
<li><p>主观方面:受限于管理体制、数据现状等方面的影响,人工智能落地应用面临重重困难。目前石油勘 </p>
<p>探开发数据标准不一致、数据质量参差不齐,没有实现数据共享,这导致人工智能应用缺乏数据基础。</p>
</li>
</ol>
<h4 id="4-2-人工智能应用发展方向"><a href="#4-2-人工智能应用发展方向" class="headerlink" title="4.2 人工智能应用发展方向"></a>4.2 人工智能应用发展方向</h4><p>结合石油勘探开发需求及人工智能技术研究现状,未来的应用发展方向主要包括以下 3 个方面。</p>
<p>①智能生产装备。</p>
<p>②自动处理解释。</p>
<p>③专业软件平台。</p>
<h3 id="参考文献:"><a href="#参考文献:" class="headerlink" title="参考文献:"></a>参考文献:</h3><p>[1] MCCARTHY J, MINSKY M L, ROCHESTER N, et al. A proposal </p>
<p>for the Dartmouth summer research project on artificial </p>
<p>intelligence[J]. AI Magazine, 2006, 27(4): 12-14. </p>
<p>[2] </p>
<p>张东晓, 陈云天, 孟晋. 基于循环神经网络的测井曲线生成方法 </p>
<p>[J]. 石油勘探与开发, 2018, 45(4): 598-607. </p>
<p>ZHANG Dongxiao, CHEN Yuntian, MENG Jin. Synthetic well logs </p>
<p>generation via Recurrent Neural Networks[J]. Petroleum Exploration </p>
<p>and Development, 2018, 45(4): 598-607. </p>
<p>[3] </p>
<p>江凯, 王守东, 胡永静, 等. 基于 Boosting Tree 算法的测井岩性 </p>
<p>识别模型[J]. 测井技术, 2018, 42(4): 395-400. </p>
<p>JIANG Kai, WANG Shoudong, HU Yongjing, et al. Lithology </p>
<p>identification model by well logging based on boosting tree </p>
<p>algorithm[J]. Well Logging Technology, 2018, 42(4): 395-400. </p>
<p>[4] REN Yili, GONG Renbin, FENG Zhou, et al. Valuable data </p>
<p>extraction for resistivity imaging logging interpretation[J]. Tsinghua </p>
<p>Science and Technology, 2020, 25(2): 281-293. </p>
<p>[5] WU X, LIAN, L, SHI Y, et al. Deep learning for local seismic image </p>
<p>processing: Fault detection, structure-oriented smoothing with edge</p>
<p>preserving, and slope estimation by using a single convolutional </p>
<p>neural network[R]. San Antonio: 2019 SEG Annual Meeting, 2019. </p>
<p>[6] ZHANG H, LIU Y, ZHANG Y, et al. Automatic seismic facies </p>
<p>interpretation based on an enhanced encoder-decoder structure[R]. </p>
<p>San Antonio: 2019 SEG Annual Meeting, 2019. </p>
<p>[7] PHAN S, SEN M. Deep learning with cross-shape deep Boltzmann </p>
<p>machine for pre-stack inversion problem[R]. San Antonio: 2019 SEG </p>
<p>Annual Meeting, 2019. </p>
<p>[8] MA Y, CAO S, RECTOR J W, et al. Automatic first arrival picking </p>
<p>for borehole seismic data using a pixel-level network[R]. San </p>
<p>Antonio: 2019 SEG Annual Meeting, 2019. </p>
<p>[9] </p>
<p>贾德利, 刘合, 张吉群, 等. 大数据驱动下的老油田精细注水优 </p>
<p>化方法[J]. 石油勘探与开发, 2020, 47(3): 629-636. </p>
<p>JIA Deli, LIU He, ZHANG Jiqun, et al. Data-driven optimization for </p>
<p>fine water injection in a mature oil field[J]. Petroleum Exploration </p>
<p>and Development, 2020, 47(3): 629-636. </p>
<p>[10] 贾虎, 邓力珲. 基于流线聚类人工智能方法的水驱油藏流场识别 </p>
<p>[J]. 石油勘探与开发, 2018, 45(2): 312-319. </p>
<p>JIA Hu, DENG Lihui. Oil reservoir water flooding flowing area </p>
<p>identification based on the method of streamline clustering artificial </p>
<p>intelligence[J]. Petroleum Exploration and Development, 2018, 45(2): </p>
<p>312-319. </p>
<p>[11] 王洪亮, 穆龙新, 时付更, 等. 基于循环神经网络的油田特高含 </p>
<p>水期产量预测方法[J]. 石油勘探与开发, 2020, 47(5): 1009-1015. </p>
<p>WANG Hongliang, MU Longxin, SHI Fugeng, et al. Production </p>
<p>prediction at ultra-high water cut stage via Recurrent Neural </p>
<p>Network[J]. Petroleum Exploration and Development, 2020, 47(5): </p>
<p>1009-1015. </p>
<p>[12] KUBOTA L K, REINERT D. Machine learning forecasts oil rate in </p>
<p>mature onshore field jointly driven by water and steam injection[R]. </p>
<p>SPE 196152-MS, 2019. </p>
<p>[13] BAO Anqi, GILDIN E, HUANG Jianhua, et al. Data-driven </p>
<p>end-to-end production prediction of oil reservoirs by EnKF-enhanced </p>
<p>Recurrent Neural Networks[R]. SPE 199005-MS, 2020. </p>
<p>[14] TARIQ Z, ABDULRAHEEM A. An artificial intelligence approach </p>
<p>to predict the water saturation in carbonate reservoir rocks[R]. SPE </p>
<p>195804-MS, 2019. </p>
<p>[15] SHAHKARAMI A, MOHAGHEGH S. 智能代理在油藏建模中的 </p>
<p>应用[J]. 石油勘探与开发, 2020, 47(2): 372-382. </p>
<p>SHAHKARAMI A,MOHAGHEGH S. Applications of smart proxies </p>
<p>for subsurface modeling[J]. Petroleum Exploration and Development, </p>
<p>2020, 47(2): 372-382. </p>
<p>[16] ARTUN E, KULGA B. 基于模糊推理的致密砂岩气储集层重复压 </p>
<p>裂井选择方法[J]. 石油勘探与开发, 2020, 47(2): 383-389. </p>
<p>ARTUN E, KULGA B. Selection of candidate wells for re-fracturing </p>
<p>in tight gas sand reservoirs using fuzzy inference[J]. Petroleum </p>
<p>Exploration and Development, 2020, 47(2): 383-389. </p>
<p>[17] SENGEL A, TURKARSLAN G. Assisted history matching of a </p>
<p>highly heterogeneous carbonate reservoir using hydraulic flow units </p>
<p>and artificial neural networks[R]. SPE 200541-MS, 2020. </p>
<p>[18] ZHANG Jian. Development of automated neuro-simulation protocols </p>
<p>for pressure and rate transient analysis applications[D]. University </p>
<p>Park, PA, USA: The Pennsylvania State University, 2017. </p>
<p>[19] COSTA L A N, MASCHIO C, SCHIOZER D J. Application of </p>
<p>artificial neural networks in a history matching process[J]. Journal of </p>
<p>Petroleum Science and Engineering, 2014, 123: 30-45.</p>
</li>
</ul>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
<link itemprop="mainEntityOfPage" href="http://example.com/2022/12/03/DecisionTree/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="HeyDream">
<meta itemprop="description" content="本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="派大星去抓水母啦(:≡">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2022/12/03/DecisionTree/" class="post-title-link" itemprop="url">DecisionTree</a>
</h2>
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2022-12-03 10:21:14" itemprop="dateCreated datePublished" datetime="2022-12-03T10:21:14+08:00">2022-12-03</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2022-12-06 10:32:15" itemprop="dateModified" datetime="2022-12-06T10:32:15+08:00">2022-12-06</time>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h2 id="决策树"><a href="#决策树" class="headerlink" title="决策树"></a>决策树</h2><p>决策树是一种树形结构的机器学习方法,是一种监督学习方法(Supervised Learning),在决策树的树形结构里,每个内部节点表示由一种特征属性引发的判断,每个节点下面的分支代表某个判断结果的输出,最后的叶子结点表示一种分类结果。 可以理解为大量的 if-else ,将大量的特征中的属性用树展示出。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
<article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
<link itemprop="mainEntityOfPage" href="http://example.com/2022/12/01/ClassifyAnimalAudio/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="HeyDream">
<meta itemprop="description" content="本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="派大星去抓水母啦(:≡">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2022/12/01/ClassifyAnimalAudio/" class="post-title-link" itemprop="url">ClassifyAnimalAudio</a>
</h2>
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2022-12-01 20:39:14 / 修改时间:22:21:17" itemprop="dateCreated datePublished" datetime="2022-12-01T20:39:14+08:00">2022-12-01</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-folder"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/MachineLearning/" itemprop="url" rel="index"><span itemprop="name">-MachineLearning</span></a>
</span>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h2 id="动物语音分类"><a href="#动物语音分类" class="headerlink" title="动物语音分类"></a>动物语音分类</h2><h3 id="1-准备数据集"><a href="#1-准备数据集" class="headerlink" title="1. 准备数据集"></a>1. 准备数据集</h3><ol>
<li><p>在github上下载动物语音分类的数据集,或者是通过爬虫爬取动物语音数据</p>
</li>
<li><p>下载的音频文件可能不是wav文件,将音频文件格式转换为wav文件。<br>1. 采用qq音乐自带的文件转换工具<br> 2. 通过ffmpeg工具,调用python辨析的文件转换代码</p>
</li>
<li><p>通过librosa工具包提取wav文件的特征,再通过matplotlib做出对应的无边框图片(可以不用无边框)。</p>
</li>
</ol>
<h3 id="2-预处理"><a href="#2-预处理" class="headerlink" title="2. 预处理"></a>2. 预处理</h3><ol>
<li><p>将图片变成32*32的灰度图像并转成Tonsor类型</p>
</li>
<li><p>对数据集进行分类和做标签。</p>
<p> <img src="/2022/12/01/ClassifyAnimalAudio/DataSet.png" alt="DataSet"></p>
</li>
</ol>
<h3 id="3-构建网络模型"><a href="#3-构建网络模型" class="headerlink" title="3. 构建网络模型"></a>3. 构建网络模型</h3><p> LeNet-5:是Yann LeCun在1998年设计的用于<a target="_blank" rel="noopener" href="https://so.csdn.net/so/search?q=%E6%89%8B%E5%86%99%E6%95%B0%E5%AD%97%E8%AF%86%E5%88%AB&spm=1001.2101.3001.7020">手写数字识别</a>的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。 </p>
<p> LeNet-5共有7层(不包括输入层),每层都包含不同数量的训练参数,如下图所示。 </p>
<p><img src="/2022/12/01/ClassifyAnimalAudio/LeNet.png" alt="LeNet"></p>
<p> LeNet-5中主要有2个卷积层、2个池化层、3个<a target="_blank" rel="noopener" href="https://so.csdn.net/so/search?q=%E5%85%A8%E8%BF%9E%E6%8E%A5%E5%B1%82&spm=1001.2101.3001.7020">全连接层</a>3种连接方式 </p>
<h4 id="卷积层"><a href="#卷积层" class="headerlink" title="卷积层"></a>卷积层</h4><p> 卷积层采用的都是5 * 5大小的卷积核,且卷积核每次滑动一个像素(步长为1),一个特征图谱使用一个卷积核。每个上层节点的值乘以连接上的参数,把这些乘积及一个偏置参数相加得到一个和。把该和输入激活函数,激活函数的输出即是下一层节点的值。</p>
<p> 卷积操作输出尺寸计算公式:</p>
<p> <strong>Out=(In-Kernel+2Padding)/Stride+1</strong></p>
<p> <strong>Kernel</strong>:卷积核尺寸,</p>
<p> <strong>Stride</strong>:步长,</p>
<p> <strong>Padding</strong>:边界填充 </p>
<p> 若要保证输出尺寸和原尺寸一致,Padding可以设置为:</p>
<p> <strong>Padding</strong> = (kernel-1)/2)</p>
<h4 id="池化层"><a href="#池化层" class="headerlink" title="池化层"></a>池化层</h4><p> 池化操作输出尺寸计算公式同卷积操作一致 </p>
<p> <strong>LeNet-5第一层:卷积层C1</strong> </p>
<p> 输入一张32 <em>32 * 1的图像,进入第一层卷积,其中输入通道是1,卷积核大小是5</em>5,输出通道是6,激活函数采用ReLu函数,也就是将1张32 * 32 <em>1 的图像变成6张28 * 28 * 6的特征图谱。28 = (32- 5+2</em>0)/1+1。(卷积的操作是扩大图像的特征)</p>
<p><strong>LeNet-5第二层:池化层S2</strong></p>
<p> S2是一个下采样层。C1层得到的6个28 * 28的特征图谱分别进行2*2(卷积核)为单位,步长为2的下抽样得到6个14 * 14的特征图谱。14 =(28-2)/2+1。(池化操作相当于压缩每张特征图谱的特征。)</p>
<p><strong>LeNet-5第三层:卷积层C3</strong></p>
<p> C3层是一个卷积层,其中输入通道是6(6张图片),输出通道是16(16个特征图谱),卷积核大小是5 * 5,步长依旧是0,激活函数采用的同样是ReLu函数。也就是将6 * 14 * 14 转成 16 * 10 * 10 的特征图谱。其中10表示 10 = (14 - 5+2*0)/1+1。</p>
<p><strong>LeNet-5第四层:池化层S4</strong></p>
<p> S4是一个下采样层。同S2一样。即最终得到一个16 * 5 * 5的特征图谱。5 = (10 -2+0*2)/1+1。</p>
<p><strong>LeNet-5第五层:全连接层C5</strong></p>
<p> C5层是一个全连接层。由于S4层得到的是16 * 5 * 5 的特征图谱。即输入通道是16,采用5*5的卷积核,输出通道是120,激活函数为Relu,于是得到的120 * 1 *1的特征图层,即全连接层。1 = (5 -5+0 * 2)/1+1。</p>
<p><strong>LeNet-5第六层:全连接层F6</strong></p>
<p> F6层是全连接层,F6层共有84节点,激活函数是Relu于是得到一个84的全连接层。</p>
<p><strong>Lenet-5第七层:全连接层Output</strong></p>
<p> 因为分类只有10个分类,即共有10个节点,分别代表数字0-9。</p>
<h2 id="4-参考代码"><a href="#4-参考代码" class="headerlink" title="4. 参考代码"></a>4. 参考代码</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 将音频文件转成MFCC文件</span></span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"><span class="keyword">import</span> librosa</span><br><span class="line"><span class="keyword">import</span> librosa.display</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> glob</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 读取音频wav文件</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_batch_file</span>(<span class="params">path</span>):</span><br><span class="line"> <span class="keyword">return</span> glob.glob(path)</span><br><span class="line"><span class="comment"># 将wav文件提取mfcc特征</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">mfcc</span>():</span><br><span class="line"> path = <span class="string">"D:\Document\研究生课程\数据挖掘\AnimalSounds\data\*\*.wav"</span></span><br><span class="line"> fileList = get_batch_file(path)</span><br><span class="line"> i = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> filePath <span class="keyword">in</span> fileList:</span><br><span class="line"> fileFName = filePath.split(<span class="string">'\\'</span>)[-<span class="number">2</span>]</span><br><span class="line"> y, sr = librosa.load(filePath, sr=<span class="literal">None</span>, mono=<span class="literal">True</span>)</span><br><span class="line"> mfcc_spectrogram = librosa.feature.mfcc(y=y, sr=sr, S=<span class="literal">None</span>, n_mfcc=<span class="number">20</span>, dct_type=<span class="number">2</span>, norm=<span class="string">'ortho'</span>, lifter=<span class="number">0</span>)</span><br><span class="line"> librosa.display.specshow(librosa.power_to_db(mfcc_spectrogram, ref=np.<span class="built_in">max</span>))</span><br><span class="line"> dirs = <span class="string">'../../mfccData/'</span>+fileFName</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> os.path.exists(dirs):</span><br><span class="line"> os.makedirs(dirs)</span><br><span class="line"> plt.axis(<span class="string">'off'</span>)</span><br><span class="line"> plt.savefig(dirs+<span class="string">'/'</span>+<span class="built_in">str</span>(i)+<span class="string">'.jpg'</span>)</span><br><span class="line"> i+=<span class="number">1</span></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> mfcc()</span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 文件重命名</span></span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">rename</span>(<span class="params">path</span>):</span><br><span class="line"> label = path.split(<span class="string">'\\'</span>)[-<span class="number">1</span>]</span><br><span class="line"> i = <span class="number">0</span></span><br><span class="line"> <span class="string">'该文件夹下所有的文件(包括文件夹)'</span></span><br><span class="line"> FileList = os.listdir(path)</span><br><span class="line"> <span class="string">'遍历所有文件'</span></span><br><span class="line"> <span class="keyword">for</span> files <span class="keyword">in</span> FileList:</span><br><span class="line"> <span class="string">'原来的文件路径'</span></span><br><span class="line"> oldDirPath = os.path.join(path, files)</span><br><span class="line"> <span class="string">'如果是文件夹则递归调用'</span></span><br><span class="line"> <span class="keyword">if</span> os.path.isdir(oldDirPath):</span><br><span class="line"> rename(oldDirPath)</span><br><span class="line"> <span class="string">'文件名'</span></span><br><span class="line"> fileName = os.path.splitext(files)[<span class="number">0</span>]</span><br><span class="line"> <span class="string">'文件扩展名'</span></span><br><span class="line"> fileType = os.path.splitext(files)[<span class="number">1</span>]</span><br><span class="line"> <span class="string">'新的文件路径'</span></span><br><span class="line"> newDirPath = os.path.join(path,label+ <span class="built_in">str</span>(i) + fileType)</span><br><span class="line"> <span class="string">'重命名'</span></span><br><span class="line"> os.rename(oldDirPath, newDirPath)</span><br><span class="line"> i += <span class="number">1</span></span><br><span class="line"></span><br><span class="line">path = <span class="string">'D:\Document\研究生课程\数据挖掘\AnimalSounds\data\Thunderstorm'</span></span><br><span class="line">rename(path)</span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 编写我的数据加载类</span></span><br><span class="line"><span class="keyword">import</span> glob</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">from</span> PIL <span class="keyword">import</span> Image</span><br><span class="line"><span class="keyword">from</span> torch.utils.data <span class="keyword">import</span> Dataset</span><br><span class="line"><span class="keyword">from</span> torchvision <span class="keyword">import</span> transforms</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">myData</span>(<span class="title class_ inherited__">Dataset</span>):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self, img_path, label_path</span>):</span><br><span class="line"> self.img_path=img_path</span><br><span class="line"> self.label_path=label_path</span><br><span class="line"> self.img_names = glob.glob(self.img_path)</span><br><span class="line"> <span class="comment"># 将文件重新压缩成32*32的灰度图像,并转成Tensor类型</span></span><br><span class="line"> self.trans = transforms.Compose([</span><br><span class="line"> transforms.Resize([<span class="number">32</span>, <span class="number">32</span>]),</span><br><span class="line"> transforms.Grayscale(),</span><br><span class="line"> transforms.ToTensor(),</span><br><span class="line"></span><br><span class="line"> ])</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__getitem__</span>(<span class="params">self, index</span>):</span><br><span class="line"> label_names=os.listdir(self.label_path)</span><br><span class="line"> img_path=os.path.join(self.label_path, label_names[index//<span class="number">40</span>],self.img_names[index])</span><br><span class="line"> image=Image.<span class="built_in">open</span>(img_path)</span><br><span class="line"> image = self.trans(image)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> image,index//<span class="number">40</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__len__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">len</span>(self.img_names)</span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> img_path = <span class="string">"D:\Document\研究生课程\数据挖掘\AnimalSounds\mfccData\*\*.jpg"</span></span><br><span class="line"> label_path = <span class="string">"D:\Document\研究生课程\数据挖掘\AnimalSounds\mfccData"</span></span><br><span class="line"> d = myData(img_path,label_path)</span><br><span class="line"> <span class="keyword">for</span> image, label <span class="keyword">in</span> d:</span><br><span class="line"> <span class="built_in">print</span>(image)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"bghjvh"</span>)</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 编写LeNet网络</span></span><br><span class="line"><span class="keyword">import</span> torch.nn <span class="keyword">as</span> nn</span><br><span class="line"><span class="keyword">from</span> collections <span class="keyword">import</span> OrderedDict</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">C1</span>(nn.Module):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(C1, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.c1 = nn.Sequential(OrderedDict([</span><br><span class="line"> (<span class="string">'c1'</span>, nn.Conv2d(<span class="number">1</span>, <span class="number">6</span>, kernel_size=(<span class="number">5</span>, <span class="number">5</span>))),</span><br><span class="line"> (<span class="string">'relu1'</span>, nn.ReLU()),</span><br><span class="line"> (<span class="string">'s1'</span>, nn.MaxPool2d(kernel_size=(<span class="number">2</span>, <span class="number">2</span>), stride=<span class="number">2</span>))</span><br><span class="line"> ]))</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.c1(img)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">C2</span>(nn.Module):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(C2, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.c2 = nn.Sequential(OrderedDict([</span><br><span class="line"> (<span class="string">'c2'</span>, nn.Conv2d(<span class="number">6</span>, <span class="number">16</span>, kernel_size=(<span class="number">5</span>, <span class="number">5</span>))),</span><br><span class="line"> (<span class="string">'relu2'</span>, nn.ReLU()),</span><br><span class="line"> (<span class="string">'s2'</span>, nn.MaxPool2d(kernel_size=(<span class="number">2</span>, <span class="number">2</span>), stride=<span class="number">2</span>))</span><br><span class="line"> ]))</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.c2(img)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">C3</span>(nn.Module):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(C3, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.c3 = nn.Sequential(OrderedDict([</span><br><span class="line"> (<span class="string">'c3'</span>, nn.Conv2d(<span class="number">16</span>, <span class="number">120</span>, kernel_size=(<span class="number">5</span>, <span class="number">5</span>))),</span><br><span class="line"> (<span class="string">'relu3'</span>, nn.ReLU())</span><br><span class="line"> ]))</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.c3(img)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">F4</span>(nn.Module):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(F4, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.f4 = nn.Sequential(OrderedDict([</span><br><span class="line"> (<span class="string">'f4'</span>, nn.Linear(<span class="number">120</span>, <span class="number">84</span>)),</span><br><span class="line"> (<span class="string">'relu4'</span>, nn.ReLU())</span><br><span class="line"> ]))</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.f4(img)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">F5</span>(nn.Module):</span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(F5, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.f5 = nn.Sequential(OrderedDict([</span><br><span class="line"> (<span class="string">'f5'</span>, nn.Linear(<span class="number">84</span>, <span class="number">10</span>)),</span><br><span class="line"> (<span class="string">'sig5'</span>, nn.LogSoftmax(dim=-<span class="number">1</span>))</span><br><span class="line"> ]))</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.f5(img)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">LeNet5</span>(nn.Module):</span><br><span class="line"> <span class="string">"""</span></span><br><span class="line"><span class="string"> Input - 1x32x32</span></span><br><span class="line"><span class="string"> Output - 10</span></span><br><span class="line"><span class="string"> """</span></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self</span>):</span><br><span class="line"> <span class="built_in">super</span>(LeNet5, self).__init__()</span><br><span class="line"></span><br><span class="line"> self.c1 = C1()</span><br><span class="line"> self.c2_1 = C2()</span><br><span class="line"> self.c2_2 = C2()</span><br><span class="line"> self.c3 = C3()</span><br><span class="line"> self.f4 = F4()</span><br><span class="line"> self.f5 = F5()</span><br><span class="line"></span><br><span class="line"> <span class="keyword">def</span> <span class="title function_">forward</span>(<span class="params">self, img</span>):</span><br><span class="line"> output = self.c1(img)</span><br><span class="line"></span><br><span class="line"> x = self.c2_1(output)</span><br><span class="line"> output = self.c2_2(output)</span><br><span class="line"></span><br><span class="line"> output += x</span><br><span class="line"></span><br><span class="line"> output = self.c3(output)</span><br><span class="line"> output = output.view(img.size(<span class="number">0</span>), -<span class="number">1</span>)</span><br><span class="line"> output = self.f4(output)</span><br><span class="line"> output = self.f5(output)</span><br><span class="line"> <span class="keyword">return</span> output</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 代码运行</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> net <span class="keyword">import</span> LeNet5</span><br><span class="line"><span class="keyword">import</span> torch</span><br><span class="line"><span class="keyword">import</span> torch.nn <span class="keyword">as</span> nn</span><br><span class="line"><span class="keyword">import</span> torch.optim <span class="keyword">as</span> optim</span><br><span class="line"><span class="keyword">from</span> torch.utils.data <span class="keyword">import</span> DataLoader</span><br><span class="line"><span class="keyword">from</span> MachineLearning.LeNet.myData <span class="keyword">import</span> myData</span><br><span class="line"></span><br><span class="line"><span class="comment"># 定义文件的数据源</span></span><br><span class="line">img_path=<span class="string">"D:\Document\研究生课程\数据挖掘\AnimalSounds\mfccData\*\*.jpg"</span></span><br><span class="line"><span class="comment"># 定义标签的数据源</span></span><br><span class="line">label_path=<span class="string">"D:\Document\研究生课程\数据挖掘\AnimalSounds\mfccData"</span></span><br><span class="line"><span class="comment"># 将数据集和标签绑在一起</span></span><br><span class="line">data=myData(img_path, label_path)</span><br><span class="line"><span class="comment"># 将数据集(包含标签)中前80%的数据作为训练集,剩下的做测试集</span></span><br><span class="line">train_size = <span class="built_in">int</span>(<span class="number">0.8</span> * <span class="built_in">len</span>(data))</span><br><span class="line">test_size = <span class="built_in">len</span>(data) - train_size</span><br><span class="line"><span class="comment"># 将数据随机排序</span></span><br><span class="line">train_dataset, test_dataset = torch.utils.data.random_split(data, [train_size, test_size])</span><br><span class="line"><span class="comment"># 加载数据,一个batch_size=256表示将256张图片绑在一起做训练。</span></span><br><span class="line">data_train_loader = DataLoader(train_dataset, batch_size=<span class="number">256</span>, shuffle=<span class="literal">True</span>)</span><br><span class="line">data_test_loader = DataLoader(test_dataset, batch_size=<span class="number">1024</span>)</span><br><span class="line"><span class="comment"># 调用LeNet5网络</span></span><br><span class="line">net = LeNet5()</span><br><span class="line"><span class="comment"># 损失函数采用交叉熵顺势函数</span></span><br><span class="line">criterion = nn.CrossEntropyLoss()</span><br><span class="line"><span class="comment"># 优化器的学习率是2e-3</span></span><br><span class="line">optimizer = optim.Adam(net.parameters(), lr=<span class="number">2e-3</span>)</span><br><span class="line"><span class="string">'''</span></span><br><span class="line"><span class="string"> 训练</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">'''</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">train</span>(<span class="params">epoch</span>):</span><br><span class="line"> i = <span class="number">0</span></span><br><span class="line"> net.train()</span><br><span class="line"> loss_list, batch_list = [], []</span><br><span class="line"> <span class="keyword">for</span> (images, labels) <span class="keyword">in</span> data_train_loader:</span><br><span class="line"> optimizer.zero_grad()</span><br><span class="line"> output = net(images)</span><br><span class="line"> loss = criterion(output,labels)</span><br><span class="line"> loss_list.append(loss.detach().cpu().item())</span><br><span class="line"> i += <span class="number">1</span></span><br><span class="line"> batch_list.append(i)</span><br><span class="line"> <span class="keyword">if</span> i % <span class="number">10</span> == <span class="number">0</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'Train - Epoch %d, Batch: %d, Loss: %f'</span> % (epoch, i, loss.detach().cpu().item()))</span><br><span class="line"> loss.backward()</span><br><span class="line"> optimizer.step()</span><br><span class="line"><span class="string">'''</span></span><br><span class="line"><span class="string"> 测试</span></span><br><span class="line"><span class="string">'''</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">test</span>():</span><br><span class="line"> net.<span class="built_in">eval</span>()</span><br><span class="line"> total_correct = <span class="number">0</span></span><br><span class="line"> avg_loss = <span class="number">0.0</span></span><br><span class="line"> <span class="keyword">for</span> (images, labels) <span class="keyword">in</span> data_test_loader:</span><br><span class="line"> output = net(images)</span><br><span class="line"> avg_loss += criterion(output, labels).<span class="built_in">sum</span>()</span><br><span class="line"> pred = output.detach().<span class="built_in">max</span>(<span class="number">1</span>)[<span class="number">1</span>]</span><br><span class="line"> total_correct += pred.eq(labels.view_as(pred)).<span class="built_in">sum</span>()</span><br><span class="line"> avg_loss /= <span class="built_in">len</span>(test_dataset)</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'Test Avg. Loss: %f, Accuracy: %f'</span> % (avg_loss.detach().cpu().item(), <span class="built_in">float</span>(total_correct) / <span class="built_in">len</span>(test_dataset)))</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">train_and_test</span>(<span class="params">epoch</span>):</span><br><span class="line"> train(epoch)</span><br><span class="line"> test()</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">main</span>():</span><br><span class="line"> <span class="keyword">for</span> e <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, <span class="number">16</span>):</span><br><span class="line"> train_and_test(e)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> main()</span><br><span class="line"></span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<script>
window.addEventListener('tabs:register', () => {
let { activeClass } = CONFIG.comments;
if (CONFIG.comments.storage) {
activeClass = localStorage.getItem('comments_active') || activeClass;
}
if (activeClass) {
let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
if (activeTab) {
activeTab.click();
}
}
});
if (CONFIG.comments.storage) {
window.addEventListener('tabs:click', event => {
if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
let commentClass = event.target.classList[1];
localStorage.setItem('comments_active', commentClass);
});
}
</script>
</div>
<div class="toggle sidebar-toggle">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
<aside class="sidebar">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
<p class="site-author-name" itemprop="name">HeyDream</p>
<div class="site-description" itemprop="description">本博客的内容是关于读研生涯的学习的一些内容,本人研究方向是人工智能语音领域的研究。</div>
</div>
<div class="site-state-wrap motion-element">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">3</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<span class="site-state-item-count">2</span>
<span class="site-state-item-name">分类</span>
</div>
<div class="site-state-item site-state-tags">
<span class="site-state-item-count">1</span>
<span class="site-state-item-name">标签</span>
</div>
</nav>
</div>
</div>
</div>
</aside>
<div id="sidebar-dimmer"></div>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
©
<span itemprop="copyrightYear">2023</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">HeyDream</span>
</div>
<div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://muse.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
</div>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/muse.js"></script>
<script src="/js/next-boot.js"></script>
</body>
</html>