深度学习笔记(python 面向对象高级编程)

自己看的视频网址:【深度学习保姆级教学】草履虫都能看懂!理论到实战、入门到起飞!人工智能基础入门必看!【ML机器学习|DL深度学习|CV计算机视觉|NLP自然语言处理】_哔哩哔哩_bilibili

机器学习流程

  • 数据获取
  • 特征工程(最核心的部分)
  • 建立模型
  • 评估与应

深度学习解决了怎么提取特征?


python入门知识

 来判断对象类型,使用type()函数

 lambda argument_list: expression(lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y

 

 有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?对于追求完美的Python程序员来说,这是必须要做到的!

Python内置的@property装饰器就是负责把一个方法变成属性调用的:

class Student(object):

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:


Mixin

MixIN的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MIxIn的功能,而不是设计多层次的复杂的继承关系

class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
    pass

定制类

>>> class Student(object):
...     def __init__(self, name):
...         self.name = name
...     def __str__(self):
...         return 'Student object (name: %s)' % self.name
...
>>> print(Student('Michael'))
Student object (name: Michael)

这样打印出来的实例,不但好看而且容易看出实例内部重要的数据。

如果直接敲变量不用print,会直接调用的是__repo__(),而不是__str__()。解决办法如下

 

class Student(object):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return 'Student object (name=%s)' % self.name
    __repr__ = __str__

__iter__

如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。

#我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 # 初始化两个计数器a,b

    def __iter__(self):
        return self # 实例本身就是迭代对象,故返回自己

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b # 计算下一个值
        if self.a > 100000: # 退出循环的条件
            raise StopIteration()
        return self.a # 返回下一个值

__getitem__  

要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:

class Fib(object):
    def __getitem__(self, n):
        a, b = 1, 1
        for x in range(n):
            a, b = b, a + b
        return a
>>> f = Fib()
>>> f[0]
1
>>> f[1]
1
>>> f[2]
2
>>> f[3]
3
>>> f[10]
89
>>> f[100]
573147844013817084101

枚举类

当我们需要定义常量时,一个办法是用大写变量通过整数来定义 

但这样仍然是变量

更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

 这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

 value属性默认从1自动开始计数

深度学习笔记(python 面向对象高级编程)_第1张图片

 

from enum import Enum, unique

@unique
class Weekday(Enum):
    Sun = 0 # Sun的value被设定为0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

使用元类 

type可以查看一个类型或变量的类型,也可以创建出新的类型

要创建一个class对象,type()函数要依次传入3个参数

  1. class的名称
  2. 继承的父类集合,注意python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法
  3. class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello
>>> def fn(self, name='world'): # 先定义函数
...     print('Hello, %s.' % name)
...
>>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class

 

你可能感兴趣的:(深度学习,深度学习,人工智能,自然语言处理)