Theano - 变量
Theano - 符号变量
Section titled “Theano - 符号变量”正如在数据类型章节中讨论的,Theano 中的变量通常是符号化的。它们在计算图中充当占位符,定义了将流经计算图的数据的类型和形状,但最初并不持有具体的数值。
声明符号变量
Section titled “声明符号变量”你可以使用来自 theano.tensor(通常导入为 tt)的构造函数来声明符号变量。构造函数决定了变量的类型(维度和数据类型)。
import theanoimport theano.tensor as tt
# 声明一个符号向量(1D 数组),数据类型为 32 位浮点数x = tt.fvector('x')# 'x' 是一个可选名称,有助于调试和图可视化。
# 声明一个符号矩阵(2D 数组),数据类型为 64 位整数y = tt.lmatrix('y')
# 声明一个符号标量(0D 张量),数据类型为 32 位整数z = tt.iscalar('z')
# 声明一个符号 3D 张量,数据类型为 64 位浮点数t3 = tt.dtensor3('t3')这些语句创建了 TensorVariable 对象。它们代表了计算图中的节点,这些节点稍后在执行 theano.function 时将接收实际数据。
你可以检查符号变量的以下属性:
print(f"Variable x: name={x.name}, type={x.type}, ndim={x.ndim}, dtype={x.dtype}")# Output: Variable x: name=x, type=TensorType(float32, vector), ndim=1, dtype=float32
print(f"Variable y: name={y.name}, type={y.type}, ndim={y.ndim}, dtype={y.dtype}")# Output: Variable y: name=y, type=TensorType(int64, matrix), ndim=2, dtype=int64
print(f"Variable t3: name={t3.name}, type={t3.type}, ndim={t3.ndim}, dtype={t3.dtype}")# Output: Variable t3: name=t3, type=TensorType(float64, tensor3), ndim=3, dtype=float64name:创建时给定的可选字符串名称。type:一个 TheanoTensorType对象,描述数据类型和广播模式(维度)。ndim:维度数量(0 表示标量,1 表示向量,2 表示矩阵等)。dtype:数据类型字符串(例如,‘float32’,‘int64’)。
常见构造函数总结
Section titled “常见构造函数总结”以下是一些常见张量变量构造函数的快速参考:
构造函数 (theano.tensor.*) | 默认数据类型 | 维度 (ndim) |
|---|---|---|
scalar(例如,fscalar,dscalar,iscalar) | 取决于前缀 (f=float32, d=float64, i=int32) | 0 |
vector(例如,fvector,dvector,ivector) | 取决于前缀 | 1 |
matrix(例如,fmatrix,dmatrix,imatrix) | 取决于前缀 | 2 |
tensor3(例如,ftensor3,dtensor3,itensor3) | 取决于前缀 | 3 |
tensor4(例如,ftensor4,dtensor4,itensor4) | 取决于前缀 | 4 |
你也可以使用通用构造函数(vector,matrix,tensor3 等),并显式指定 dtype,这通常更受欢迎,因为它更清晰:
# 显式创建一个 int32 向量explicit_vec = tt.vector('explicit_vec', dtype='int32')print(f"Explicit Vec: type={explicit_vec.type}, dtype={explicit_vec.dtype}")# Output: Explicit Vec: type=TensorType(int32, vector), dtype=int32
# 显式创建一个 float64 矩阵explicit_mat = tt.matrix('explicit_mat', dtype='float64')print(f"Explicit Mat: type={explicit_mat.type}, dtype={explicit_mat.dtype}")# Output: Explicit Mat: type=TensorType(float64, matrix), dtype=float64符号值与具体值
Section titled “符号值与具体值”区分它们至关重要:tt.fvector('x') 创建一个符号,代表未来一个 float32 向量。它不像 NumPy 数组 np.array([1.0, 2.0], dtype='float32') 那样持有数据。符号变量定义了计算图的规则和类型,而具体值(通常是 NumPy 数组)只在你执行编译后的 theano.function 时提供。
符号变量是定义 Theano 计算的基本构建块。你声明它们来代表你期望计算的输入、中间结果和输出。通过 Theano 运算符(如 +, *, tt.dot, tt.nnet.relu 等)连接这些变量,你就可以构建 Theano 将进行优化和编译的计算图。
下一章将讨论一种特殊的变量类型,共享变量,它对于在训练过程中持有模型参数等持久状态至关重要。