计算机科学和Python编程导论(三) 一些简单的数值程序

计算机导论以python为舟_计算机科学导论 《计算机科学导论(第5版)》按照教育部高教司主持评审的《中国计算机科学与技术学科教程2002》进行编写,并参照美国计算机学会(Association for Computing Machinery,ACM)和美国电气和电子工程师协会(Institute of Electrical and Electronic Engineers,IEEE)的计算教程2015,用逻辑严密的编写方式将读者引入本学科各... 阅读详情

基本概念

1. 穷举法

穷举法:是猜测与检验算法的一个变种。我们枚举所有可能性,直至得到正确答案或者尝试完所有值。

#寻找完全立方数的立方根
x = int(input('Enter an integer: '))
ans = 0
while ans**3 < abs(x):
    ans = ans + 1
if ans**3 != abs(x):
    print(x, 'is not a perfect cube')
else:
    if x < 0:
        ans = -ans
    print('Cube root of', x,'is', ans)

那么,对于何种x值,程序能正常结束呢?答案是“所有整数”。
注:
1.表达式ans**3的值从0开始,并随着每次循环逐渐变大;
2.当这个值达到或超过abs(x)时,循环结束;
3.因为abs(x)的值总为正,所以循环结束前进行的迭代次数必然是有限的。编写循环时,应该使用一个合适的递减函数。这个函数具有如下属性:

  1. 它可以将一组程序变量映射为一个整数;
  2. 进入循环时,它的值是非负的;
  3. 当它的值≤0时,循环结束;
  4. 每次循环它的值都会减小。

2. for循环

for循环中常用到range()函数,因此先对它进行介绍:

  1. range函数接受3个整数参数:start、stop和step。生成一个数列:start、start + step、start + 2*step,等等。
  2. 如果step是正数,最后一个元素就是小于stop的最大整数start + i * step。如果step是负数,最后一个元素就是大于stop的最小整数start + i * step。
  3. 数列中的数值是以“按需产生”的原则生成的,所以即使range(1000000)这样的表达式也只占用很少内存。
#寻找完全立方数的立方根
x = int(input('Enter an integer: '))
for ans in range(0, abs(x)+1):
    if ans**3 >= abs(x):
        break
if ans**3 != abs(x):
    print(x, 'is not a perfect cube')
else:
    if x < 0:
        ans = -ans
    print('Cube root of', x,'is', ans)

3. 近似解和二分查找

穷举法是一种查找技术,只在被查找集合中包含答案时才有效

#使用穷举法求近似平方根
x = 25
epsilon = 0.01
step = epsilon**2
numGuesses = 0
ans = 0.0
while abs(ans**2 - x) >= epsilon and ans <= x:
    ans += step
    numGuesses += 1
print('numGuesses =', numGuesses)

if abs(ans**2 - x) >= epsilon:
    print('Failed on square root of', x)
else:
    print(ans, 'is close to square root of', x)

二分查找法,可以提升查询效率

x = 25
epsilon = 0.01
numGuesses = 0
low = 0.0
high = max(1.0, x)
ans = (high + low)/2.0
while abs(ans**2 - x) >= epsilon:
    print('low =', low, 'high =', high, 'ans =', ans)
    numGuesses += 1
    if ans**2 < x:
        low = ans
    else:
        high = ans
    ans = (high + low)/2.0
print('numGuesses =', numGuesses)
print(ans, 'is close to square root of', x)

4. 关于浮点数

很多时候,float类型的数值是实数的一个非常好的近似。但“很多时候”并不代表所有情况,这个功能失效时会引起不可思议的后果。例如,试着运行以下代码:

x = 0.0
for i in range(10):
    x = x + 0.1
if x == 1.0:
    print(x, '= 1.0')
else:
    print(x, 'is not 1.0')
# 结果
0.9999999999999999 is not 1.0

为什么会出现这样的结果呢?

  1. 其实这和二进制与十进制表示方式有关(python中二进制表示的0.1并不是真的等于十进制中0.1)。
  2. 那Python中写作0.1的十进制分数1/10呢?若使用4位有效数字,最好的表示方式是(0011,-101),等于3/32,也就是0.09375。如果有5位有效的二进制数字,可以将0.1表示成(11001, -1000),等于25/256,也就是0.09765625。那么,需要多少位有效数字才能使用浮点数准确表示0.1呢?需要无穷位!不存在两个整数sig和exp,使sig × 2-exp = 0.1。所以无论Python(或任何一种语言)使用多少位有效数字表示浮点数,都只能表示0.1的一个近似值。
  3. 所以将0.1相加10次真的不等于10乘以0.1的值

5. 牛顿-拉弗森法

牛顿-拉弗森法可以用于求单变量多项式的值,那么什么是单变量多项式?

单变量多项式或者是0,或者是一个有限数目的非零单项式的和。每一项都由一个常数(项的系数)乘以变量的非负整数次方(这里为2次方)组成。

牛顿-拉弗森法的原理:

逐次逼近;牛顿证明了一个定理:如果存在一个值guess是多项式p的根的近似值,那么guess -p(guess)/p’(guess)就是一个更好的近似值,其中p’是p的一次导数。

#利用牛顿.拉弗森法寻找平方根
#寻找x,满足x**2-24在epsilon和0之间
epsilon = 0.01
k = 24.0
guess = k/2.0
while abs(guess*guess - k) >= epsilon:
    guess = guess - (((guess**2) - k)/(2*guess))
print('Square root of', k, 'is about', guess)

编程练习

1.编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0 <pwr < 6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输出一条消息进行说明。

# 解法1
r = int(input('input an integer'))
root = 0
i = 0
for pwr in range(1, 7):
    result = -1
    while result < abs(r):
        root += 1
        result = root**pwr
    if result == abs(r):
        if r < 0:
            root = -root
        print('root:{},pwr:{}'.format(root, pwr))
        i += 1
    root = 0
print('总共有{}种输出结果'.format(i))
# 解法2
x=int(input('Enter an integer: '))
root=1
pwr=1
w=root**pwr
i=0
while w<abs(x) or root<=abs(x): 
    if pwr<6: 
        w=root**pwr
        if w==abs(x) and x<0:
            i+=1
            print('root','=',-root,'pwr','=',pwr)
        elif w==abs(x):
            i+=1
            print('root','=',root,'pwr','=',pwr)
        pwr+=1
    else:
        pwr=1
        root+=1
        w=root**pwr
print('符合条件的整数对共有{}种'.format(i))

2.假设s是包含多个小数的字符串,由逗号隔开,如s = '1.23, 2.4, 3.123'。编写一个程序,输出s中所有数值的和。

# 解法1
s = '1.23, 2.4, 3.123'
sum = 0.0
for i in map(lambda i: float(i), s.split(',')):
    sum += i
print(sum)
# 解法2
s = '1.23, 2.4, 3.123'
a=s.split(',')
t=0
for i in a:
    t=t+float(i)
print(t)

3.如果语句x = 25被替换为x = -25,代码会如何运行?

程序会进入无限循环
# 该程序while循环中,x值始终未变。则导致该循环条件(abs(ans**2 - x) >= epsilon)始终成立,程序进入无限循环中。
x = -25
epsilon = 0.01
numGuesses = 0
low = 0.0
high = max(1.0, x)
ans = (high + low)/2.0
while abs(ans**2 - x) >= epsilon: # 这一步永远不会停止
    print('low =', low, 'high =', high, 'ans =', ans)
    numGuesses += 1
    if ans**2 < x:
        low = ans
    else:
        high = ans
    ans = (high + low)/2.0
print('numGuesses =', numGuesses)
print(ans, 'is close to square root of', x)

4.如何修改图3-4中的代码,才能求出一个数的立方根?这个数既可以是正数,也可以是负数。(提示:修改low保证答案位于待查找区域。)

x = -30
epsilon = 0.01
numGuesses = 0
x_abs = abs(x)  # 关键代码
low = 0.0
high = max(1.0, x_abs)
ans = (high + low) / 2.0
while abs(ans**3 - x_abs) >= epsilon:
    numGuesses += 1
    if ans**3 < x_abs:
        low = ans
    else:
        high = ans
    ans = (high + low) / 2.0
print('numGuesses =', numGuesses)
if x < 0:
    print(-ans, 'is close to square root of', x)
else:
    print(ans, 'is close to square root of', x)

5.二进制数10011等于十进制中的哪个数?

19
# 解法1 进制转换
# 解法2 函数求解
int('10011',base=2)

6.在牛顿.拉弗森法的实现中添加一些代码,跟踪求平方根所用的迭代次数。在这段代码的基础上编写一个程序,比较牛顿.拉弗森法和二分查找法的效率。

#利用牛顿.拉弗森法寻找平方根
#寻找x,满足x**2-24在epsilon和0之间
epsilon = 0.01
k = 24.0
guess = k/2.0
a=0
while abs(guess*guess - k) >= epsilon:
    guess = guess - (((guess**2) - k)/(2*guess))
    a+=1
print('Square root of', k, 'is about', guess)
print('牛顿法迭代次数={}'.format(a))

#利用二分查找法寻找平方根
#寻找x,满足x**2-24在epsilon和0之间
x = 24.0
epsilon = 0.01
numGuesses = 0
low = 0.0
high = max(1.0, x)
ans = (high + low)/2.0
b=0
while abs(ans**2 - x) >= epsilon:
    numGuesses += 1
    if ans**2 < x:
        low = ans
    else:
        high = ans
    ans = (high + low)/2.0
print(ans, 'is close to square root of', x)
print('二分法迭代次数 ={}'.format(numGuesses))
Square root of 24.0 is about 4.8989887432139305
牛顿法迭代次数=4
4.8984375 is close to square root of 24.0
二分法迭代次数 =9
Python程序员必读的一本书《Python编程导论》,豆瓣评分9.0以上 本书特色 在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴 掌握多种不同的思维方式是每个人大学时代的必修课。具备... 阅读详情

相关推荐

基于Python语言的计算机科学应用研究

介绍Python在人工智能和深度学习领域的应用,如TensorFlow、PyTorch等框架的使用,以及如何使用Python进行神经网络的训练和应用。介绍Python在Web开发方面的应用,如Django、Flask等框架的使用,以及如何使用Python进行Web应用程序的开发和部署。介绍Python语言中常用的库和框架,如NumPy、Pandas、Matplotlib等,并简要说明它们在数据分析、机器学习等领域的应用。分析Python语言的优势,如语法简单易学、丰富的库和框架支持、广泛的应用领域等。

2301_80750687的博客 1314

《21天学通python》实验题解答

第三章 python 数据类型 1,编程实现用户输入一个整数,输出整数平方 #!/usr/bin/python import math a=int(input('please input a number:\n')) print(math.pow(a,2)) 2,编程实现用户输入3个数,放入列表,并输出其最小值 #!/usr/bin/python a=int(input('ple...

weixin_44174676的博客 2636

新手学Python之学习官网教程(三: An Informal Introduction to Python)

文章目录1. 前言2. Python的正式介绍 1. 前言   好几节课过去,终于可以开始吃正餐了,也就是要开始学习Python的基本语法内容了。      之前课程已经讲过了Jupyter Notebook的使用方法。按理来说,直接使用Jupyter Notebook学习基础语法更方便快捷,但是考虑再三,为了让大家学的更加扎实,更推荐先使用Python解释器的交互模式进行练习。有余力的同学,建议在Jupyter Notebook中再练习一遍。   Python解释器的交互模式,我们再来学习一下:代码和

herosunly的博客 1万+

Python数学问题10:整数平方运算

# 整数平方运算 try: num = eval(input("请输入一个整数:")) print(num ** 2) except NameError: print("输入不是整数")

简时刻的博客 1713

Sage编程入门及数值方法应用体验

本文将探讨Sage编程语言的基础知识以及它在数值方法中的应用。作者Razvan A. Mezei通过其著作,向读者介绍了Sage编程的核心概念,并分享了如何利用Sage进行数值计算的实例。通过阅读本书,读者能够掌握Sage编程的基本技能,并在数学和计算机科学的学习中应用它。

weixin_36012152的博客 447

C语言数值算法程序大全(第二版中文版)

C语言数值算法源程序,国外经典教材,可读性高!

python实验1

在pycharm中编写一个Python程序,导入数学模块math,从键盘输入一个整数,然后调用Math中的数学函数sqrt()计算该数的平方根,输出结果。

m0_69367154的博客 1710

Python中实现输入一个整数的案例

主要介绍了Python中实现输入一个整数的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

要求用户在Python中输入整数| 限制用户仅输入整数值

input() function can be used for the input, but it reads the value as a string, then we can use the int() function to convert string value to an integer. input()函数可用于输入,但它将值读取为字符串,然后可以使用int()函数将字符串值转...

cumt951045的博客 1万+

【AAAI2025】【小目标检测】FBRT-YOLO:更快速、更优的实时航拍图像检测方法

FBRT-YOLO是一种新型实时航拍图像检测方法,针对小目标检测的精度与效率平衡问题提出创新解决方案。该方法通过两个轻量级模块显著提升性能:特征互补映射模块(FCM)将浅层空间位置信息深度整合至网络深层,缓解信息失衡;多核感知单元(MKP)采用多尺度卷积增强多目标感知能力。实验表明,在VisDrone、UAVDT和AI-TOD数据集上,FBRT-YOLO在检测精度和速度方面均优于现有实时检测器,特别适用于资源受限的飞行设备。该模型通过精简网络结构,在保持高性能的同时降低了计算负担,为航拍实时检测提供了高效解

weixin_44184852的博客 2903

超详细!DeepSeek本地搭建部署、搭建知识库及智能体教程

通过以上详细的步骤,我们完成了DeepSeek的本地搭建部署、知识库的搭建以及智能体的创建。这一过程不仅让我们深入了解了大模型的应用,还为我们开发个性化的智能应用奠定了基础。在实际应用中,可以根据具体需求进一步优化模型、知识库和智能体的性能和功能。希望本文能帮助大家快速上手DeepSeek相关技术,开启属于自己的人工智能创新之旅。

Ljugg的博客 8184

python整数类型在每一台计算机上的取值范围是一样的_计算机科学和Python编程导论(三) 一些简单的数值程序...

基本概念1. 穷举法穷举法:是猜测与检验算法的一个变种。我们枚举所有可能性,直至得到正确答案或者尝试完所有值。#寻找完全立方数的立方根x = int(input('Enter an integer: '))ans = 0while ans**3 < abs(x):ans = ans + 1if ans**3 != abs(x):print(x, 'is not a perfect cube'...

weixin_31424199的博客 882

SCL3400硬件避坑指南:引脚兼容性测试+模式切换异常处理

本文针对村田SCL3400双轴倾角计在实际硬件设计中的常见问题,提供了详细的避坑指南。重点解析了从SCL3300迁移时的引脚兼容性真相,包括SPI时序、电源去耦等关键差异,并深入探讨了模式切换中超量程错误的复现原因与软件容错方案。同时,指导了如何根据应用场景配置低通滤波器,并给出了无自动唤醒功能下的可靠电源与长线SPI通信管理策略。

weixin_29190573的博客 292

python交互式程序设计导论答案第五周_学堂在线_计算机科学与Python编程导论_章节测试答案...

学堂在线_计算机科学与Python编程导论_章节测试答案更多相关问题素描的三种表现形式是:()。运行下列程序:Private Sub form_Click()For i = 1 To 2x = 1For j = 1 To 3x = 5For k = 1 T窗体上仅有一个文本框Text1,当执行程序后按下键盘“a”键时打印出的结果是()。Private Sub Text为提供线路的利用率,数据通信中...

weixin_39834090的博客 586

1.2 从“跟网”到“构网”:技术范式的历史性转变

新型电力系统面临"双高"特征带来的稳定性挑战,促使并网控制技术从"跟网型"向"构网型"范式转变。传统跟网型变流器作为受控电流源依赖强电网,存在短路电流能力有限、易失稳等缺陷;而构网型变流器模拟同步发电机特性,作为受控电压源具备自主建立电压/频率、提供虚拟惯性、增强短路容量和改善系统阻尼四大核心能力。这一技术范式转变使变流器从电网跟随者变为构建支撑者,成为解决新能源大规模接入稳定性的关键。

技术工作者 722

M系列芯片MacBook上UTM虚拟机部署达梦DM8的避坑指南

本文详细介绍了在M系列芯片MacBook上使用UTM虚拟机部署达梦数据库DM8的完整流程与避坑指南。针对ARM架构环境,重点解决了虚拟机选择、麒麟系统安装、系统调优及DM8命令行安装中的常见问题,为开发者提供了稳定可靠的国产数据库本地测试方案。

weixin_28455801的博客 453

计算机科学和Python编程导论(二 ) Python简介

基本概念 1. 编程语言的分类 低级编程与高级编程:二者之间的区别是,编写程序时,我们是使用机器层次的指令和数据对象(底层操作),还是使用语言设计者提供的更为抽象的操作(图形用户界面,UI)。 通用性与专注于某一应用领域:指编程语言中的基本操作是广泛适用的还是只针对某个领域,例如SQL。 解释运行与编译运行:指程序员编写的指令序列,即源代码是直接执行(通过解释器,使用解释型语言编写的程序更...

Datawhale 2280

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1291

MIT 6.00计算机科学与编程导论:用Python 3实战计算思维与算法

计算机科学的核心并非只是语法细节,而是一种将现实问题形式化、步骤化的计算思维。从基础的变量、类型到递归、复杂度和牛顿迭代法等经典算法原理,理解这些底层逻辑是构建编程能力的基石。掌握计算思维与算法基础,不仅有助于提升代码质量,更能支撑数据分析、Web开发等多元应用场景。而Python作为入门语言,因其清晰简洁的语法,是实践这些概念的最佳载体。MIT 6.00计算机科学与编程导论正是这样一门经典公开课,它借助Python 3和丰富的数据结构实战,帮助学习者跨越从语法到思维的鸿沟。无论是零基础新手还是希望强化内功

weixin_34342992的博客 447

作为一名爬虫人如何实现千万级数据爬取?

爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃!Bro

吴秋霖的博客 1万+

《RT-Thread入门与实战》第1章:RT-Thread概述与核心优势

2006年由熊谱翔发起2017年成立上海睿赛德电子科技公司2021年成为国内首个通过ISO 26262 ASIL-D认证的RTOS。

2301_79143213的博客 985

python交互式程序设计导论第二周_程序设计导论:Python计算与应用开发实践(原书第2版)...

出版者的话译者序前言第1章 计算机科学导论 11.1 计算机科学 11.1.1 计算机专业人员的工作 11.1.2 模型、算法和程序 21.1.3 必备的工具 31.1.4 什么是计算机科学 31.2 计算机系统 31.2.1 计算机硬件 31.2.2 操作系统 41.2.3 网络和网络协议 51.2.4 程序开发语言 51.2.5 软件库 6出版者的话译者序前言第1章 计...

weixin_28812943的博客 279

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python教材答案程序设计导论_程序设计导论:Python语言实践

前 言Introduction to Programming in Python: An Interdisciplinary Approach21世纪以前的教育基础是“读、写和算术”,而现在的教育基础则是“读、写和计算”。学习编程是每个科学和工程专业学生教育过程中的重要部分。除了直接的应用外,学习编程是了解计算机科学本质的步。计算机科学对现代社会产生了毋庸置疑的影响。本书的目的是在科学环境中为需...

weixin_39968640的博客 441

IMSL CNL 7.0.0 (x86-64)Crack

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机科学和Python编程导论(一) 计算机相关理论

基本概念 1. 计算机基础知识 陈述性知识:关于事实的描述。如果满足y × y = x,那么x的平方根就是数值y。 程序性知识:说明“如何做”,描述的是信息演绎的过程。 算法:是一个有穷指令序列,它在给定的输入集合中执行时,会按照一系列定义明确的状态进行,并最终产生一个输出结果。 解释器:可以执行任意合法指令集的程序(这样计算机就能够计算任何可以使用基本指令集描述的问题。) 计算机...

Datawhale 1069

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

计算机科学与python编程,计算机科学和Python编程导论(一) 计算机相关理论

基本概念1. 计算机基础知识陈述性知识:关于事实的描述。如果满足y × y = x,那么x的平方根就是数值y。程序性知识:说明“如何做”,描述的是信息演绎的过程。算法:是一个有穷指令序列,它在给定的输入集合中执行时,会按照一系列定义明确的状态进行,并最终产生一个输出结果。解释器:可以执行任意合法指令集的程序(这样计算机就能够计算任何可以使用基本指令集描述的问题。)计算机的功能:执行计算与保存计算结...

weixin_30472793的博客 357
上一篇: 计算机科学和Python编程导论(二 ) Python简介
下一篇: 番茄钟工作法:你真的了解番茄钟么?
Datawhale
Datawhale 领域专家: 物联网技术领域 领域专家: 物联网技术领域
博客等级 码龄8年 8900粉丝 1080原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值