python——深度学习(感知器)总结

今年想要将深度学习中的CNN加入机器人足球中来,于是在看零基础入门深度学习课程,准备入门深度学习(大佬们请忽略),以下是连接

https://www.zybuluo.com/hanbingtao/note/433855

但是在亲自编程时遇到一些问题,首先我的python版本是3.x,这对于源代码中有些表达或者模块的引用需要更改。其次就是我的python掌握的并不是非常熟练,对于lambda表达式和一些BIF等存在很多问题。下面是我遇到的一些问题总结


一、reduce()

在python2 中,reduce()函数为其BIF,但是python 3.x中reduce()函数从全局名字空间中移除,转移到了functools模块中,所以在python3中要想使用reduce()函数需要引入functools模块然后去调用此函数,如下:

from functools import reduce

reduce()函数语法 :

reduce(function, iterable[, initializer])

reduce()函数的作用是运用函数对参数列表的元素进行累计,即用reduce()函数中的function对可迭代对象中的第一个和第二个元素进行操作,得到结果后再和第三个进行function运算,一直到最后一个元素。

def f(x,y):
    return x*y

>>> reduce(f, range(1,4))
6

 二、map()

map()函数是python内置的高阶函数,map()函数的语法:

map(function, iterable, ...)

此函数接收一个function和一个list,通过函数function作用在list的每个元素上,最终得到一个新的list并返回。

注意:

1.map()函数不改变原有的list,而是生成一个新的list,因此可以用map()函数将一个list转换成另一个list

           2.在python2和python3中,map()函数的返回类型不同,在python2中map()返回的是list类型,但是在python中map()函数返回迭代器iterators类型,想要打印出具体数值需要对map()函数进行list操作,即list(map(...)),否则结果如下:

           

下面是map()函数应用的一个例子: 

def f(x):
    return x*x
>>>print(map(f, [1, 2, 3]))
[1,4,9]


三、zip()

zip()函数接受多个可迭代对象作为参数,将这些对象中对应元素打包成一个tuple。

注意:在python2和python3中zip()函数的返回对象不同,python2中返回这些元组打包成的listl列表,但在python3为了节省内存,返回的是一个对象,如果想要打印需要对zi()函数进行list操作。

以下分别是python2和python3中使用zip()函数的例子:

>>>a = [1,2,3]
>>>b = [4,5,6]
>>>zip(a,b)     # 打包为元组的列表python2
[(1, 4), (2, 5), (3, 6)]
>>>list(zip(a,b))    #python3
[(1, 4), (2, 5), (3, 6)]

 四、匿名函数lambda

lambda函数在python2、3中有很大区别。在python2中lambda函数可以接收多个参数,可以指定作为参数的元素的元组的个数,python2的解释器会把这个元组“解开”成命名参数,然后在lambda函数中引用。python3中仍然可以传递一个元组为lambda函数的参数,但是解释器不会把它解析成命名参数,这时需要通过位置索引来引用每个参数python

python 2 python 3 注释
lambda (x,): x + f(x) lambda x1 : x1[0] + f(x1[0]) 注1
lambda (x,y): x + f(y) lambda x_y : x_y[0] + f(x_y[1]) 注2
lambda (x,(y,z)): x + y + z lambda x_y_z: x_y_z[0] + x_y_z[1][0]+ x_y_z[1][1] 注3
lambda x,y,z: x+y+z 和python2相同 注4

注1:如果使用包含一个元素的元组作为参数,在python3中会用位置索引x[0]来表示,其中x1是自己定义的,不违反命名原则下可以起其它的名字

注2:类比注1,使用含有两个元素的元组(x,y)作为参数的lambda函数被转换为x_y,它有两个位置参数,即x_y[0]和x_y[1]

注3:可以处理使用嵌套命名参数的元组作为参数的lambda函数,位置参数像二维数组

注4:使用多个参数的lambda函数。python2和python3相同

最后调试程序中遇到的手误的小错误:

关于__name__ == ’__main__’

当模块作为主程序运行的时候,__name__属性的值是“__main__”,当该模块被调用导入到另一个模块的时候,"__name__"属性值为模块名称。注意:是__main__而不是__main()__

你可能感兴趣的:(python——深度学习(感知器)总结)