思考
y_pred = tf.nn.softmax(tf.matmul(x, W) + b)
"""
softmax函数中输入是什么,输出是什么
"""
- 要理解输入输出是什么的先决条件:理解softmax的过程
softmax函数本质是一种非线性变化
- ############## 占坑,下次更新用图说话 ##################
import tensorflow as tf
"""
=> softmax函数的作用是啥?
对每个节点的线性加和作一个非线性变化
具体公式:...
=> 所以需要传递什么数据给softmax函数接口?
需要传递所有所有节点的输出值给softmax函数
这里容易乱的地方是理论中的数据格式是单个样本的特征
单个样本中特征与一个节点的所有连线表示成一组w
有n个节点就有n组w,
"""
"""
理论与实际实践的不同有很大不同...
比如处理的数据格式
"""
X = tf.constant([[1,2,3], [3,2,4]], dtype=tf.float32)
"""
2个样本,每个样本3个特征
"""
W = tf.constant([[1,1],[2,2],[3,3]], dtype=tf.float32)
"""
因为softmax是全连接,所以w个数是 样本特征数 x 节点数
假设节点数为2
则w共有6个
W矩阵的格式:
行数为特征数,列数为节点数
每一列都是表示一组w
"""
bias = tf.constant([1, 2], dtype=tf.float32)
"""
每一组附带一个偏置项
"""
y = tf.nn.softmax(tf.matmul(X, W) + bias)
"""
tf.matmul(X, W) + bias
本身是个矩阵
列表示节点
行表示样本
matrix[i][j]值表示的就是样本i在节点j上的输出值
"""
with tf.Session() as sess:
print(sess.run(y))
"""
softmax的输出值是什么
"""
总结
- 理论的算法中不需要考虑太多,因为数据结构或则其他细节都理想化了
- 所以具体实现时候的设计要考虑很多现实世界的细节
- 但是理解算法的时候并没有加入这些细节(或则说理论算法的过程与实际开发的过程不完全一致,尤其是加上矩阵的时候)
- 所以真正实现的过程中,需要慢慢打磨语法上的细节
- 不断区分出理论与实践的不同点,将实现过程与理论过程相统一
- 目前最深的感触,一切不同的根源在于数据结构
- 理论中只考虑了单个样本的计算过程,实际编程是m个样本一起计算
- TODO:继续熟悉tensorflow语法,进一步理解算法思想