032-机器学习背后的思维-针对入门小白的概念算法及工具的朴素思考

    科技2025-05-21  41

    11.3 编程思路的转换

    在学校里的教授的如C、Python、Java等编程语言, 采用的命令式编程的思路。 你需要下达一个指令,让计算机做一个动作, 希望得到是一个程序中业务逻辑变量的 状态转换。 其背后的理论基础是形式语言与自动机理论, 程序抽象为一个有穷自动 机。

    而在TensorFlow中的编程思路会略有不同,初学时应该引起注意。 其与符号式编 程类似,其通过数学模型对数理逻辑进行抽象,计算单元是函数, 而不是指令。

    上面这段话,可能有些抽象,我们通过两段程序代码来说明一下。 这两段程序代码都是要找出斐波拉契数列的第n 个值。 斐波拉契数列:1,1,2,3,5,8,13,21,44,··· 。 从 数学知识的角度,我们知道, 这个数列除了前两个数为整数 1 ,从第 3 值开始, 都是 数列中前两个值相加的结果。 用数学表达式表示其通项公式为a n = a n−1 + a n−2 。 如果 用声明式编程的语言来写这个函数如下: 如果用命令式编程的代码是这样的: 很明显, 声明式编程更加倾向于数学定义本身。 从程序代码上看, 写法更加简 洁, 但也更加抽象。 而命令式编程的写法, 更注重指令和操作的细节, 更加具体 化。 在后面,我们将会看到, 如果遵循声明式编程思想, 可将具体的操作细节隐藏 起来, 会大大简化程序员的编程负担, 减少出错。 通常来说,这两种编程思路都是 〸分优秀,不分伯仲的。 区别在于对于普通程序的业务逻辑最好选择命令式编程; 对 于数理逻辑等抽象逻辑最好使用声明式编程。

    如果到这儿,你还不太明白,我再举个例子来区别它们。 一个声明式编程的设计 讲究是按部就班, 按照数理逻辑进行就不会出错,不大关心异常处理逻辑。 而你如 果参加过真实上线的程序编写就会知道, 命令式编程下的程序代码中有大量的代码是 在处理业务异常的情况。 也就是说,数理逻辑中的数学公式已经被数学家严格证明过 了, 不大可能会有异常。 而我们通常编程的逻辑属于业务逻辑,会因为业务过程中各 类随机因素的出现, 让程序员必须花费大量精力编写代码,来处理这些业务的异常。

    另外,需要强调一点,Python 语言与 TensorFlow 的 Python API 是不同的, TensorFlow 的 Python API是声明式编程思路; 而 Python 语言是命令式的编程。 在用 TensorFlow API实际编程时,不建议使用 IF-ELSE 等逻辑语句, 不要使用业务逻辑。

    最后一点是, Python 语言仅仅是 TensorFlow 一种前端接口语言而已, 本质与 TensorFLow 的内核没有什么关系。 这有点象网络编程的 Client-Server 前后端分离结 构。 举个例子,前端网页编程用 JavaScript,用 Html CSS 定义数据收集展示, 数据收 集好之后,用JSON格式打包后,传到后端 Server进一步处理。 Server上的编程语言就 多了去, 如 C, Java,Python 等等。 类似的,前端Client 负责定义计算流图 graph 结构,准备数据, 后端的 Server 收到 Client 传过来的 graph 结构以及训练数据, 决定在 什么设备上以何种方式执行图中的各种计算任务。

    这几点初学者会时常忘记,误以为在前端写的 Python 代码, 自然可以传到后端 执行。这个理解是不正确的。 再次提醒大家,特别要注意。

    Processed: 0.009, SQL: 8