集智专栏
资源加载中,请稍后...
集智专栏

[2018.05.08直播] Python之面向对象

往期回顾

负基础入门Python系列汇总


直播时间 20:00

1. 页内观看(仅视频)

2. 完整观看(可发弹幕):Python:面向对象

3. Bilibili直播



33. 类和对象

类(class)

class AKM:

    pass


对象(object): an instance of a class

The AKM in your hands.

your_gun = AKM()


属性(attribute)

How is it going with your gun.

your_gun.damage
your_gun.shooting_range
...


方法(method):do something

你可以向着法西斯的开火:

your_gun.fire()


也可以交给你的队友:

your_gun.drop()


33.1 Everything is an object in Python

33.2 class

class <ClassName>(Object):
# python2


class <ClassName>:
# python3


33.3 init(self)

构造函数,安排上了。

程序说明
__init__()
示例代码
class zhizhang: def __init__(self, name, job): self.name = name self.job = job print("Hua Q!") ai = zhizhang('VAN', 'artist') print("My name is {}, I'm an {}".format(ai.name, ai.job))


33.4 属性/方法权限

程序说明
attributes/methods
示例代码
class AKM: def __init__(self, damage, ammo, attach): self.damage = damage self._ammo = ammo self.__attach = attach akm = AKM(50, 30, 3) print(akm.damage) print(akm._ammo) print(akm.__attach)


33.5 继承

super(): 调用父类的属性/方法。

程序说明
inherit
示例代码
class Person: def __init__(self, name, age, job): self.name = name self.age = age self.job = job def intro(self): print("{}岁, {} desu".format(self.age, self.job)) class Young(Person): def intro(self): print("Hua Q!") super().intro() I = Person('LaoWang', 24, 'student') you = Young('WuKe', 5,'artist') I.intro() you.intro()





34. 山寨TensorFlow

这一系列出自我站翻译过的《土法神经网络》(Deep Learning from Scratch)系列,自己动手,丰衣足食,以类和对象的形式实现了TensorFlow的基本功能。当然性能无法与原生框架相提并论,所以原作者的Github repo叫"TensorSlow".

不过原文有很多读者反映没看懂,后来我发现是讲解顺序和变量命名的原因。原本先Operation后placeholder, Variable的顺序确实不太便于理解;另外变量的命名不够直观,过长的名称也降低了代码可读性。所以我稍微改写了一下放在这里。

34.1 TensorFlow

TensorFlow,顾名思义就是Tensor(张量)在Flow,如下图所示:

Computational GraphComputational Graph


因为官网被墙了,所以如果你感兴趣的话可以查阅由掘金社区组织翻译的中文文档


34.2 Simple Example

34.2.1 Data

程序说明
Data
示例代码
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt %matplotlib inline x_data = np.float32(np.random.rand(2, 100)) y_data = np.dot([0.100, 0.200], x_data) + 0.300 from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x_data[0], x_data[1], y_data)
程序验证过程
True


34.2.2 Linear Model

程序说明
Linear Model
示例代码
b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b print(y)
程序验证过程
True


34.2.3 Initialization

程序说明
Training
示例代码
# Parameters loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) # Initialization init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # Initial Prediction(random) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x_data[0], x_data[1], y_data) ax.scatter(x_data[0], x_data[1], np.dot(sess.run(W), x_data)+sess.run(b), c='r')
程序验证过程
True


34.2.4 Training

程序说明
Training
示例代码
for step in range(0, 201): sess.run(train) if step % 20 == 0: print(step, sess.run(W), sess.run(b)) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x_data[0], x_data[1], y_data) ax.scatter(x_data[0], x_data[1], np.dot(sess.run(W), x_data)+sess.run(b), c='r')
程序验证过程
True



34.3 “逆向工程”

Computational Graph

定义计算的流程结构。

程序说明
Graph
示例代码
class Graph: def __init__(self): self.operations = [] self.placeholders = [] self.variables = [] def as_default(self): global _default_graph _default_graph = self class placeholder: def __init__(self): self.output = None self.go = [] _default_graph.placeholders.append(self) class Variable: def __init__(self, initial_value=None): self.output = initial_value self.go = [] _default_graph.variables.append(self) class Operation: def __init__(self, come=[]): self.come = come self.go = [] self.output = None for i in come: i.go.append(self) _default_graph.operations.append(self) class matmul(Operation): def __init__(self, n, m): super().__init__([n, m]) def compute(self,a,b): return a.dot(b) class add(Operation): def __init__(self, n, m): super().__init__([n, m]) def compute(self, a, b): return a + b
程序验证过程
True


Session

让张量Flow的更猛烈些吧。

程序说明
Session
示例代码
class Session: def run(self, nodes, feed_dict={}): nodes_postorder = traverse_postorder(nodes) print(nodes_postorder) for node in nodes_postorder: if isinstance(node, placeholder): node.output = feed_dict[node] elif isinstance(node, Operation): node.output = node.compute(*[i.output for i in node.come]) if isinstance(node.output, list): node.output = np.array(node.output) return nodes.output def traverse_postorder(operation): nodes_postorder = [] def recurse(node): if isinstance(node, Operation): for i in node.come: recurse(i) nodes_postorder.append(node) recurse(operation) return nodes_postorder # Instance x = placeholder() A = Variable([[1,0], [0,-1]]) b = Variable([1,1]) y = matmul(A, x) z = add(y, b) # Build Graph and Session Graph().as_default() sess = Session() output = sess.run(z, {x:[1,2]})
程序验证过程
True


您也许喜欢这些文章

深度增强学习前沿算法思想

发表至数据科学
2016年AlphaGo计算机围棋系统战胜顶尖职业棋手李世石,引起了全世界的广泛关注,人工智能进一步被推到了风口浪尖。而其中的深度增强学习算法是AlphaGo的核心,也是通用人工智能的实现关键。本文将带领大家了解深度增强学习的前沿算法思想,领略人工智能的核心奥秘。

[Scikit-learn教程] 02.03 模型选择:预测器及其参数

发表至系列教程
之前的文档已经介绍了scikit-learn中预测器的基本用法,本篇将深入讨论如何选择合适的模型,以及如何交叉验证(Cross Validation)评估选择的正确性。

随时随地机器学习,TF的轻量版——TensorFlow Lite上线

发表至业界新闻
针对于越来越多的在小型和移动设备上进行机器学习任务的需求,TensorFlow团队特意打造了一款轻量级的机器学习工具——TensorFlow Lite,它能够为我们的智能手机直接提供机器学习资源和环境,让智能化体验真正伴随我们,如影随形。

文章评论(0)