制作闹钟网站,wordpress做门户怎么样,wordpress视频缩略图,优化技术服务一、使用tensorflow框架实现逻辑回归
1. 数据部分#xff1a;
首先自定义了一个简单的数据集#xff0c;特征 X 是 100 个随机样本#xff0c;每个样本一个特征#xff0c;目标值 y 基于线性关系并添加了噪声。tensorflow框架不需要numpy 数组转换为相应的张量#xff0…一、使用tensorflow框架实现逻辑回归
1. 数据部分
首先自定义了一个简单的数据集特征 X 是 100 个随机样本每个样本一个特征目标值 y 基于线性关系并添加了噪声。tensorflow框架不需要numpy 数组转换为相应的张量可以直接在模型中使用数据集。
2. 模型定义部分
方案 1model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(1,))])
解释
此方案使用 tf.keras.Sequential 构建模型在列表中直接定义了一个 Dense 层input_shape(1,) 表明输入数据的形状。编译模型时选择随机梯度下降SGD优化器和均方误差损失函数。训练完成后使用 sklearn 的指标评估模型并输出模型的系数和截距。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定义数据集
X np.random.rand(100, 1).astype(np.float32)
y 2 * X 1 0.3 * np.random.randn(100, 1).astype(np.float32)# 构建模型
model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(1,))
])# 编译模型
model.compile(optimizertf.keras.optimizers.SGD(learning_rate0.01),lossmean_squared_error)# 训练模型
history model.fit(X, y, epochs1000, verbose0)# 模型评估
y_pred model.predict(X)
mse mean_squared_error(y, y_pred)
r2 r2_score(y, y_pred)
print(f均方误差 (MSE): {mse})
print(f决定系数 (R²): {r2})# 输出模型的系数和截距
weights, biases model.layers[0].get_weights()
print(f模型系数: {weights[0][0]})
print(f模型截距: {biases[0]})方案 2model tf.keras.Sequential()
解释
这种方式先创建一个空的 Sequential 模型再使用 add 方法添加 Dense 层。后续编译、训练、评估和输出模型参数的步骤与方案 1 类似。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定义数据集
X np.random.rand(100, 1).astype(np.float32)
y 2 * X 1 0.3 * np.random.randn(100, 1).astype(np.float32)# 构建模型
model tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_shape(1,)))# 编译模型
model.compile(optimizertf.keras.optimizers.SGD(learning_rate0.01),lossmean_squared_error)# 训练模型
history model.fit(X, y, epochs1000, verbose0)# 模型评估
y_pred model.predict(X)
mse mean_squared_error(y, y_pred)
r2 r2_score(y, y_pred)
print(f均方误差 (MSE): {mse})
print(f决定系数 (R²): {r2})# 输出模型的系数和截距
weights, biases model.layers[0].get_weights()
print(f模型系数: {weights[0][0]})
print(f模型截距: {biases[0]})方案 3自定义模型类
解释
继承 Model 基类创建自定义模型类 Linear在 __init__ 方法中定义 Dense 层。call 方法用于实现前向传播逻辑类似于 PyTorch 中的 forward 方法。后续的编译、训练、评估和参数输出流程和前面方案一致。
import tensorflow as tf
from tensorflow.keras import Model
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定义数据集
X np.random.rand(100, 1).astype(np.float32)
y 2 * X 1 0.3 * np.random.randn(100, 1).astype(np.float32)# 自定义模型类
class Linear(Model):def __init__(self):super(Linear, self).__init__()self.linear tf.keras.layers.Dense(1)def call(self, x, **kwargs):x self.linear(x)return x# 构建模型
model Linear()# 编译模型
model.compile(optimizertf.keras.optimizers.SGD(learning_rate0.01),lossmean_squared_error)# 训练模型
history model.fit(X, y, epochs1000, verbose0)# 模型评估
y_pred model.predict(X)
mse mean_squared_error(y, y_pred)
r2 r2_score(y, y_pred)
print(f均方误差 (MSE): {mse})
print(f决定系数 (R²): {r2})# 输出模型的系数和截距
weights, biases model.linear.get_weights()
print(f模型系数: {weights[0][0]})
print(f模型截距: {biases[0]})方案 4函数式 API 构建模型
解释
使用函数式 API 构建模型先定义输入层再定义 Dense 层最后使用 Model 类将输入和输出连接起来形成模型。编译、训练、评估和参数输出的步骤和前面方案相同。注意这里通过 model.layers[1] 获取 Dense 层的权重和偏置因为第一层是输入层。
import tensorflow as tf
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score# 自定义数据集
X np.random.rand(100, 1).astype(np.float32)
y 2 * X 1 0.3 * np.random.randn(100, 1).astype(np.float32)# 定义函数构建模型
def linear():input tf.keras.layers.Input(shape(1,), dtypetf.float32)y tf.keras.layers.Dense(1)(input)model tf.keras.models.Model(inputsinput, outputsy)return model# 构建模型
model linear()# 编译模型
model.compile(optimizertf.keras.optimizers.SGD(learning_rate0.01),lossmean_squared_error)# 训练模型
history model.fit(X, y, epochs1000, verbose0)# 模型评估
y_pred model.predict(X)
mse mean_squared_error(y, y_pred)
r2 r2_score(y, y_pred)
print(f均方误差 (MSE): {mse})
print(f决定系数 (R²): {r2})# 输出模型的系数和截距
weights, biases model.layers[1].get_weights()
print(f模型系数: {weights[0][0]})
print(f模型截距: {biases[0]})3. 训练和评估部分
使用 fit 方法对模型进行训练verbose0 表示不显示训练过程中的详细信息训练过程中的损失信息会存储在 history 对象中。通过多个 epoch 进行训练每个 epoch 包含前向传播、损失计算、反向传播和参数更新。使用 predict 方法进行预测计算均方误差和决定系数评估模型性能通过 model.linear.get_weights() 获取模型的系数和截距。
二、保存tensorflow框架逻辑回模型
方式 1保存为 HDF5 文件后缀名 .h5
这种方式会保存模型的结构、权重以及训练配置如优化器、损失函数等加载时可以直接得到一个完整可用的模型。
import tensorflow as tf
import numpy as np# 自定义数据集
# 生成 1000 个样本每个样本有 2 个特征
X np.random.randn(1000, 2).astype(np.float32)
# 根据特征生成标签
y (2 * X[:, 0] 3 * X[:, 1] 0).astype(np.float32).reshape(-1, 1)# 构建逻辑回归模型
model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(2,), activationsigmoid)
])# 编译模型
model.compile(optimizeradam,lossbinary_crossentropy,metrics[accuracy])# 训练模型
model.fit(X, y, epochs100, batch_size32, verbose1)# 保存模型为 HDF5 文件
model.save(logistic_regression_model.h5)# 加载 HDF5 文件模型
loaded_model tf.keras.models.load_model(logistic_regression_model.h5)# 生成新的测试数据
X_test np.random.randn(100, 2).astype(np.float32)
y_test (2 * X_test[:, 0] 3 * X_test[:, 1] 0).astype(np.float32).reshape(-1, 1)# 进行预测
y_pred_probs loaded_model.predict(X_test)
y_pred (y_pred_probs 0.5).astype(np.float32)# 计算准确率
accuracy tf.keras.metrics.BinaryAccuracy()
accuracy.update_state(y_test, y_pred)
print(f预测准确率: {accuracy.result().numpy()})代码解释
数据生成与模型构建生成自定义数据集构建并编译逻辑回归模型然后进行训练。保存模型使用 model.save(logistic_regression_model.h5) 将模型保存为 HDF5 文件。加载模型使用 tf.keras.models.load_model(logistic_regression_model.h5) 加载保存的模型。预测与评估生成新的测试数据使用加载的模型进行预测并计算预测准确率。
方式 2只保存参数
这种方式只保存模型的权重参数不保存模型的结构和训练配置。加载时需要先定义与原模型相同结构的模型再将保存的参数加载到新模型中。
import tensorflow as tf
import numpy as np# 自定义数据集
# 生成 1000 个样本每个样本有 2 个特征
X np.random.randn(1000, 2).astype(np.float32)
# 根据特征生成标签
y (2 * X[:, 0] 3 * X[:, 1] 0).astype(np.float32).reshape(-1, 1)# 构建逻辑回归模型
model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(2,), activationsigmoid)
])# 编译模型
model.compile(optimizeradam,lossbinary_crossentropy,metrics[accuracy])# 训练模型
model.fit(X, y, epochs100, batch_size32, verbose1)# 只保存模型参数
model.save_weights(logistic_regression_weights.h5)# 重新定义相同结构的模型
new_model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(2,), activationsigmoid)
])# 编译新模型
new_model.compile(optimizeradam,lossbinary_crossentropy,metrics[accuracy])# 加载保存的参数到新模型
new_model.load_weights(logistic_regression_weights.h5)# 生成新的测试数据
X_test np.random.randn(100, 2).astype(np.float32)
y_test (2 * X_test[:, 0] 3 * X_test[:, 1] 0).astype(np.float32).reshape(-1, 1)# 进行预测
y_pred_probs new_model.predict(X_test)
y_pred (y_pred_probs 0.5).astype(np.float32)# 计算准确率
accuracy tf.keras.metrics.BinaryAccuracy()
accuracy.update_state(y_test, y_pred)
print(f预测准确率: {accuracy.result().numpy()})代码解释
数据生成与模型构建同样生成自定义数据集构建并编译逻辑回归模型进行训练。保存参数使用 model.save_weights(logistic_regression_weights.h5) 只保存模型的权重参数。重新定义模型重新定义一个与原模型结构相同的新模型并进行编译。加载参数使用 new_model.load_weights(logistic_regression_weights.h5) 将保存的参数加载到新模型中。预测与评估生成新的测试数据使用加载参数后的新模型进行预测并计算预测准确率。
通过以上两种方式可以根据实际需求选择合适的模型保存方法。
三、加载tensorflow框架逻辑回归模型
方案 1加载保存为 HDF5 文件的模型
当用户将模型保存为 HDF5 文件后缀名 .h5时使用 tf.keras.models.load_model 函数可以直接加载整个模型包括模型的结构、权重以及训练配置。
import tensorflow as tf
import numpy as np# 生成一些示例数据用于预测
X_test np.random.randn(100, 2).astype(np.float32)
y_test (2 * X_test[:, 0] 3 * X_test[:, 1] 0).astype(np.float32).reshape(-1, 1)# 加载保存为 HDF5 文件的模型
loaded_model tf.keras.models.load_model(logistic_regression_model.h5)# 进行预测
y_pred_probs loaded_model.predict(X_test)
y_pred (y_pred_probs 0.5).astype(np.float32)# 计算准确率
accuracy tf.keras.metrics.BinaryAccuracy()
accuracy.update_state(y_test, y_pred)
print(f预测准确率: {accuracy.result().numpy()})代码解释
数据准备生成一些示例数据 X_test 和对应的标签 y_test用于后续的预测和评估。模型加载使用 tf.keras.models.load_model(logistic_regression_model.h5) 加载之前保存为 HDF5 文件的模型。预测与评估使用加载的模型对测试数据进行预测将预测概率转换为标签然后计算预测准确率。
方案 2加载只保存的参数权重和偏置
当用户只保存了模型的参数权重和偏置时需要先定义一个与原模型结构相同的新模型然后使用 load_weights 方法将保存的参数加载到新模型中。
import tensorflow as tf
import numpy as np# 生成一些示例数据用于预测
X_test np.random.randn(100, 2).astype(np.float32)
y_test (2 * X_test[:, 0] 3 * X_test[:, 1] 0).astype(np.float32).reshape(-1, 1)# 重新定义相同结构的模型
new_model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(2,), activationsigmoid)
])# 编译新模型
new_model.compile(optimizeradam,lossbinary_crossentropy,metrics[accuracy])# 加载保存的参数
new_model.load_weights(logistic_regression_weights.h5)# 进行预测
y_pred_probs new_model.predict(X_test)
y_pred (y_pred_probs 0.5).astype(np.float32)# 计算准确率
accuracy tf.keras.metrics.BinaryAccuracy()
accuracy.update_state(y_test, y_pred)
print(f预测准确率: {accuracy.result().numpy()})代码解释
数据准备同样生成示例数据 X_test 和 y_test 用于预测和评估。模型定义与编译重新定义一个与原模型结构相同的新模型 new_model并进行编译设置优化器、损失函数和评估指标。参数加载使用 new_model.load_weights(logistic_regression_weights.h5) 将之前保存的参数加载到新模型中。预测与评估使用加载参数后的新模型对测试数据进行预测将预测概率转换为标签最后计算预测准确率。
通过以上两种方案可以根据不同的保存方式正确加载 TensorFlow 模型。
四、完整流程
1. 实现思路
① 导入必要的库
在开始之前需要导入 TensorFlow 用于构建和训练模型NumPy 用于数据处理以及一些评估指标相关的库。
② 生成自定义数据集
自定义数据集可以根据具体需求生成这里以一个简单的二维数据集为例每个样本有两个特征标签为 0 或 1。
③ 构建逻辑回归模型
一共有4种方式案例使用其中的TensorFlow的tf.keras.Sequential 构建模型在列表中直接定义了一个 Dense 层input_shape(1,) 表明输入数据的形状。
④ 训练模型
使用生成的数据集对模型进行训练。
⑤ 保存模型
可以选择将模型保存为 HDF5 文件或只保存模型的参数案例为保存为 HDF5 文件。
⑥ 加载模型并进行预测
此案例为加载 HDF5 文件模型
2. 代码示例
import tensorflow as tf
import numpy as np
from sklearn.metrics import accuracy_score# 生成 1000 个样本每个样本有 2 个特征
X np.random.randn(1000, 2).astype(np.float32)
# 根据特征生成标签
y (2 * X[:, 0] 3 * X[:, 1] 0).astype(np.float32).reshape(-1, 1)# 构建逻辑回归模型
model tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape(2,), activationsigmoid)
])# 编译模型
model.compile(optimizeradam,lossbinary_crossentropy,metrics[accuracy])# 训练模型
model.fit(X, y, epochs100, batch_size32, verbose1)# 保存模型
model.save(logistic_regression_model)# 加载模型
loaded_model tf.keras.models.load_model(logistic_regression_model)# 生成新的测试数据
X_test np.random.randn(100, 2).astype(np.float32)
y_test (2 * X_test[:, 0] 3 * X_test[:, 1] 0).astype(np.float32).reshape(-1, 1)# 进行预测
y_pred_probs loaded_model.predict(X_test)
y_pred (y_pred_probs 0.5).astype(np.float32)# 计算准确率
accuracy accuracy_score(y_test, y_pred)
print(f预测准确率: {accuracy})
3. 代码解释
① 数据集生成
使用 np.random.randn 生成具有两个特征的随机样本根据特征的线性组合生成标签。
② 模型构建
使用 tf.keras.Sequential 构建一个简单的逻辑回归模型包含一个具有 sigmoid 激活函数的全连接层。
③ 模型编译
使用 adam 优化器和 binary_crossentropy 损失函数进行编译并监控准确率指标。
④ 模型训练
使用 fit 方法对模型进行训练指定训练轮数和批次大小。
⑤ 模型保存
使用 model.save 方法将模型保存到指定目录。
⑥ 模型加载与预测
使用 tf.keras.models.load_model 加载保存的模型生成新的测试数据进行预测并计算预测准确率。