TensorFlow(Keras)
暑假学习
- tf (Keras)
Linear Layer
1 | linear_layer = tf.keras.layers.Dense(units=1, activation='linear', ) |
事实上参数创建是在第一次forward过程中进行,因此现在并无参数
1 | set_w = np.array([[200]]) |
在进行完初始化后可以手动设置参数,进行计算我们可以发现,与使用
NumPy
是相同的
1 | prediction_tf = linear_layer(X_train) |
Sigmoid Layer
1 | model = Sequential( |
通过 model.summary()
我们可以获取网络的概况,包含每一层的参数与激活函数

1 | logistic_layer = model.get_layer('L1') |
这里的模型是已经被初始化过的,是通过增加的
Input Layer
,预先告诉 tf
计算参数
1 | set_w = np.array([[2]]) |
同样的我们可以对其进行参数手工设置
1 | a1 = model.predict(X_train[0].reshape(1, 1)) |
我们使用 model.predict
进行前向传播计算
Normalization Layer
1 | X,Y = load_coffee_data() |
标准化是为了 feature scaling
,使得数据范围在
获取每层权重
1 | W1, b1 = model.get_layer("layer1").get_weights() |
这里的参数是这样的,
矩阵中的一列是一个神经元的权重,而 向量中对应的分量即为对应神经元的 bias
。 其实这里会有一点绕,做多元线性回归的时候,我们使用,其中 均为向量,这是对于单一数据点来说的。 如果我们要一次计算多个数据点,那我们会想到使用矩阵来堆叠数据,我们很容易想到将 进行堆叠, 矩阵中的每一行是一个数据点,这也符合我们使用二维数组的习惯,但是因为矩阵乘法的约定,如果我们仍要使用 的形式,那么应该要将这个输入 转置,使 矩阵中的每一行都是一个神经元的权重,但是在实践中我们通常直接给一般形式的 ,而在处理时将 矩阵以转置的形式存储,由此而来的列作为权重,这样即可通过 计算 ,而事实上,我们通常的 正是通过行向量形式存储,因此这样处理起来更为方便.
拟合
1 | model.compile( |
其中 model.compile
用于指定损失函数与优化器,model.fit
则将进行梯度下降