动量法应用NASA测试不同飞机机翼噪音

%matplotlib inline
from mxnet import nd
import numpy as np
from mxnet import autograd,gluon,init,nd
from mxnet.gluon import nn,data as gdata,loss as gloss
import time

def get_data():
    data = np.genfromtxt(‘./data/airfoil_self_noise.dat‘, delimiter=‘\t‘)
    data = (data - data.mean(axis=0)) / data.std(axis=0)
    return nd.array(data[:1500, :-1]), nd.array(data[:1500, -1])

features, labels = get_data()
features[0]
labels[0]

# 定义网络
def linreg(X,w,b):
    return nd.dot(X,w) + b

# 平方损失
def squared_loss(y_hat,y):
    return (y_hat - y.reshape(y_hat.shape))**2/2

# 初始化参数
def init_momentum_states():
    v_w = nd.zeros((features.shape[1], 1))
    v_b = nd.zeros(1)
    return (v_w, v_b)

# params [w,b]
# states [v_w,v_b] 初始化状态
# hyperparams {‘lr‘:0.02,‘momentum‘:0.5}
def sgd_momentum(params, states, hyperparams):
    for p, v in zip(params, states):
        v[:] = hyperparams[‘momentum‘] * v + hyperparams[‘lr‘] * p.grad
        p[:] -= v

def train(trainer_fn, states, hyperparams, features, labels,
              batch_size=10, num_epochs=2):
    # 初始化模型。
    net, loss = gb.linreg, gb.squared_loss
    w = nd.random.normal(scale=0.01, shape=(features.shape[1], 1))
    b = nd.zeros(1)
    w.attach_grad()
    b.attach_grad()

    def eval_loss():
        return loss(net(features, w, b), labels).mean().asscalar()

    ls = [eval_loss()]
    data_iter = gdata.DataLoader(
        gdata.ArrayDataset(features, labels), batch_size, shuffle=True)
    for _ in range(num_epochs):
        start = time.time()
        for batch_i, (X, y) in enumerate(data_iter):
            with autograd.record():
                l = loss(net(X, w, b), y).mean()  # 使用平均损失。
            l.backward()
            trainer_fn([w, b], states, hyperparams)  # 迭代模型参数。
            if (batch_i + 1) * batch_size % 100 == 0:
                ls.append(eval_loss())  # 每 100 个样本记录下当前训练误差。
    # 打印结果和作图。
    print(‘loss: %f, %f sec per epoch‘ % (ls[-1], time.time() - start))
    gb.set_figsize()
    gb.plt.plot(np.linspace(0, num_epochs, len(ls)), ls)
    gb.plt.xlabel(‘epoch‘)
    gb.plt.ylabel(‘loss‘)

train(trainer_fn=sgd_momentum,states= init_momentum_states(),hyperparams={‘lr‘: 0.02, ‘momentum‘: 0.5}, features=features, labels=labels)

train(sgd_momentum,init_momentum_states(),{‘lr‘:0.02,‘momentum‘:0.9},features,labels)

train(sgd_momentum,init_momentum_states(),{‘lr‘:0.004,‘momentum‘:0.9},features,labels)

gluon 版:

def train_gluon(trainer_name,trainer_hyperparams,features,labels,batch_size=10,num_epochs=2):
    # 初始化模型
    net = nn.Sequential()
    net.add(nn.Dense(1))
    net.initialize(init.Normal(sigma=0.01))
    loss = gloss.L2Loss()

    def eval_loss():
        return loss(net(features),labels).mean().asscalar()

    ls = [eval_loss()]
    data_iter = gdata.DataLoader(gdata.ArrayDataset(features,labels),batch_size,shuffle=True)

    # 创建 Trainer 实例迭代模型参数
    trainer = gluon.Trainer(net.collect_params(),trainer_name,trainer_hyperparams)

    for _ in range(num_epochs):
        start = time.time()
        for batch_i, (X,y) in enumerate(data_iter):
            with autograd.record():
                l = loss(net(X),y)
            l.backward()
            trainer.step(batch_size)
            if (batch_i + 1) * batch_size % 100 ==0:
                ls.append(eval_loss())

    # 打印结果和作图。
    print(‘loss: %f, %f sec per epoch‘ % (ls[-1], time.time() - start))
    gb.set_figsize()
    gb.plt.plot(np.linspace(0, num_epochs, len(ls)), ls)
    gb.plt.xlabel(‘epoch‘)
    gb.plt.ylabel(‘loss‘)

train_gluon(‘sgd‘,{‘learning_rate‘:0.004,‘momentum‘:0.9},features,labels)

原文地址:https://www.cnblogs.com/TreeDream/p/10138733.html

时间: 2024-08-02 08:12:54

动量法应用NASA测试不同飞机机翼噪音的相关文章

6-5-树的双亲表示法-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第6章  树和二叉树 - 树的双亲表示法 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c.SequenceStack.c    

如何保证测试的覆盖率

如何保证测试的覆盖率 一.首先测试需求分析要全面. 测试需求分析分两步: 1.测试需求的获取 需求的来源: 显式需求: (1)原始需求说明书 (2)产品规格书 (3)软件需求文档 (4)有无继承性文档 (5)经验库 (6)通用的协议规范 隐式需求:用户的主观感受,市场的主流观点,专业人士的评价分析 2,需求的分析 ,产生测试需求文档 将不同的需求来源划分成一个个需求点,针对每一点进行测试分析: (1)界定测试范围 (2)利用各种测试设计的方法产生测试点 在测试方法方面,可做如下注意: 其一,分析

DC综合及仿真验证和DFT测试

综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是RTL CODE.很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证时,就无法用好HDL另外一部分强大的功能.有时间还是可以看看Writing Testbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充. 这里以Design Com

探索性测试入门

提纲: --什么是探索性测试 --探索性测试的来源 --探索性测试的指导思想 --探索性测试的相应测试方法 --探索性测试与传统测试风格的比较 1.什么是探索性测试 在概念上说,探索性测试是一种测试风格,而不是某一种具体的测试方法(等价类测试/边界测试等),它强调系统软件学习,设计测试用例以及测试执行同时进行,他适用于要求在短时间内以及测试需求频繁变更下寻找出重大缺陷的情况. 2.探索性测试的来源 探索性测试是由测试专家Cem Kaner博士在1983年的时候提出.测试专家James A. Wh

正交试验法

正交试验法介绍: >>测试人员希望测试充分(即测试用例代表性强),又要求用例数量不可过大,究竟该如何设计测试用例则显得尤为关键. >>正交试验法即使用事先已创建好的表格--正交表,来安排试验并进行数据分析的一种科学试验设计方法,该法简单易行.应用甚广 借助正交表可从大量的试验数据(测试用例)中筛选出适量的.有代表性的值,从而协助合理地安排试验(测试),满足了"在简化用 例的同时尽量充分开展测试"的需求. 正交试验表: >>正交试验法的介绍较抽象,就是

3.7盒测试方法 之 业务路径覆盖法

一.场景法 场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程.当拿到一个测试任务时,我们并不是先关注某个控件的边界值.等价类是否满足要求,而是先要关注它的主要功能和业务流程是否正确实现,这就需要使用场景法来完成测试.当业务流程测试没有问题,也就是该软件的主要功能没有问题时,我们再重点从边界值.等价类等方面对控件进行测试. 在冒烟测试时也主要采用场景法进行测试进行测试. 1.1 场景法中重要的概念 (1)基本流:按照正确的业务流程来实现的一条操作路(也就是模拟正确的操作流程): (2

小组博客(八):测试及调试

软件测试是软件开发时期的最后一个阶段,也是软件质量和可靠性保证中至关重要的一个环节.软件测试的基本任务是通过在计算机上执行程序,暴露出程序潜在的错误,以便进行纠错,从而保证程序的可靠运行,降低软件的风险. 黑盒测试就是根据被测程序功能来进行测试,所以也称为功能测试.用黑盒法涉及测试用例,有四种常用技术:等价分类法,边界值分析法,决策表法和因果图法. 整个测试基于需求文档,看是否能满足需求文档中所有需求.黑盒测试要求测试者在测试时不能使用与被测系统内部结构相关的知识或经验,适用于对系统的功能进行测

软件测试方法-边界值分析法

边界值分析法: 在测试技术中,边界值分析法与同等价类划分法有这同意重要的地位,测试工作中频繁使用的程度与等价类划分法基本一致,每使用一次等价类划分法都应该对应使用边界值分析法,对着两个方法结合的深入理解,以及灵活使用也是软件测试工作的基础 边界值分析法就是对输入和输出的边界值进行测试的一种黑盒测试方法.通常边界值分析法作为等价类划分法的补充,在这种情况下,其测试用例来自等价类的边界值 例如等价类划分法例子中: 1.软件需求中要求当产品购物车购物总金额在[200,300]的时候,购物车产品享受9折

【转】场景法设计测试用例

转自:http://blog.sina.com.cn/s/blog_4aa1f1570100acvb.html (一)场景法原理 现在的软件几乎都是用事件触发来控制流程的.象GUI软件.游戏等.事件触发时的情景并形成了场景,而同一事件不同的触发顺序和处理结果就形成了事件流.这种在软件设计方面的思想可以引入到软件测试中,可以生动地 描绘出事件触发时的情景,有利于设计测试用例,同时使测试用例更容易理解和执行. 在测试一个软件的时候,在场景法中,测试流程是软件功能按照正确的事件流实现的一条正确流程,那