TensorFlow 学习笔记

Undefined443 / 2024-10-12 / 原文

Tensorflow 是谷歌开发的一款机器学习软件包。2019 年,谷歌将 Keras 集成到 Tensorflow 中,并发布了 Tensorflow 2.0。Keras 是 François Chollet 独立开发的一个框架,为 Tensorflow 创建了一个简单的、以层为中心的接口。

张量(Tensor)是数组的另一个名称。

注意 TensorFlow 对数据的处理方式和 NumPy 有所不同。你可以使用 NumPy 加载数据,当你把 NumPy 对象作为参数传给 TensorFlow 时,TensorFlow 会自动将其转换为内部的 Tensor 格式。计算完成后,你可以使用 tensor.numpy() 获取其 NumPy 版本。

TensorFlow.org

import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid

创建一个只有一个神经元的 layer,且无激活函数(linear, \(a^{[l]} = \vec w \cdot a^{[l-1]} + b\)

linear_layer = Dense(units=1, activation = 'linear')  # Dense 是神经网络中的 layer 的另一种名字,unit 是神经元的另一种名字

获取权重:

w, b = linear_layer.get_weights()

设置权重:

linear_layer.set_weights([set_w, set_b])

使用 layer 进行计算:

activation = linear_layer(X_train[0].reshape(1,1))

Tensorflow 最常用于创建多层模型。Sequential model 是构建这些模型的便捷方法:

model = Sequential(
    [
        Dense(1, input_dim=1,  activation = 'sigmoid', name='L1')
    ]
)

查看模型的层数和参数个数:

model.summary()

获取模型中的一层:

logistic_layer = model.get_layer('L1')

归一化训练数据:

norm_l = tf.keras.layers.Normalization(axis=-1)  # 此 layer 非神经网络中的 layer
norm_l.adapt(X)  # 学习均值和方差
Xn = norm_l(X)   # 使用训练好的 layer 计算归一化的数据

训练模型:

# 定义损失函数,指定编译优化
model.compile(
    loss = tf.keras.losses.BinaryCrossentropy(),
    optimizer = tf.keras.optimizers.Adam(learning_rate=0.01),
)

# 运行梯度下降,并根据数据拟合权重。
model.fit(
    X, y,
    epochs=10
)

使用模型进行预测:

prediction = model.predict(X_train[0].reshape(1,1))

通过概率进行决策:

yhat = (predictions >= 0.5).astype(int)