欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Python----机器学习(基于TensorFlow框架的线性回归)

Python----机器学习(基于TensorFlow框架的线性回归)

2025/5/6 12:54:15 来源:https://blog.csdn.net/weixin_64110589/article/details/146429122  浏览:    关键词:Python----机器学习(基于TensorFlow框架的线性回归)

一、基于TensorFlow框架的线性回归

1.1、输入数据

import tensorflow as tf  
import numpy as np  seed = 42  
tf.random.set_seed(seed)  # 输入数据
data = [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2],   [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1],   [1.5, 75.6], [0.4, 34.0], [0.8, 62.3]]  # 转换为numpy数组
data = np.array(data)  
x_data = data[:, 0]  
y_data = data[:, 1]  # 装换为 TensorFlow张量
x_train = tf.constant(x_data, dtype=tf.float32)  
y_train = tf.constant(y_data, dtype=tf.float32)  # 创造数据集
buffer_size = len(data)  
data = tf.data.Dataset.from_tensor_slices((x_train, y_train))  
data = data.shuffle(buffer_size=buffer_size).batch(len(data)).prefetch(buffer_size=tf.data.experimental.AUTOTUNE)  

1.2、定义前向模型

1.2.1、方案一

model=tf.keras.Sequential([tf.keras.layers.Dense(1,input_shape=(1,))])

1.2.2、方案二

model=tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1,input_shape=(1,)))

1.2.3、方案三

model=tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(1,)))
model.add(tf.keras.layers.Dense(1))

1.2.4、方案四

x_train = tf.constant(np.expand_dims(x_data,axis=1), dtype=tf.float32)
#前面的x_train要修改成这样增加一个维度
class Linear(tf.keras.Model):def __init__(self):super().__init__()self.linear=tf.keras.layers.Dense(1)def __call__(self, x, **kwargs):x=self.linear(x)return x
model=Linear()

1.2.5、方案五 

class Linear(tf.keras.Model):def __init__(self):super().__init__()self.linear=tf.keras.layers.Dense(1)def __call__(self, x, **kwargs):x=self.linear(x)return x
model=Linear()

1.3、定义损失函数和优化器

optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
model.compile(optimizer=optimizer, loss="mean_squared_error")

1.4、输出数据

1.4.1、方案一

for epoch in range(1, 501):total_loss = 0for batch_x, batch_y in data:history = model.fit(x_train, y_train, verbose=0)loss = history.history["loss"][0]total_loss += loss# 计算平均损失avg_loss = total_loss / len(data)# 5、显示频率设置if epoch % 10 == 0 or epoch == 1:print(f"epoch:{epoch}, avg_loss:{avg_loss}")

1.4.2、方案二

history = model.fit(x_train, y_train, epochs=epoches)

1.5、完整代码

import tensorflow as tf  
import numpy as np  # 设置随机种子,确保结果可重复  
seed = 42  
tf.random.set_seed(seed)  # 输入数据  
data = [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2],  [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1],  [1.5, 75.6], [0.4, 34.0], [0.8, 62.3]]  # 转换为numpy数组  
data = np.array(data)  
x_data = data[:, 0]  # 提取x值  
y_data = data[:, 1]  # 提取y值  # 装换为 TensorFlow张量  
x_train = tf.constant(x_data, dtype=tf.float32)  # 将x_data转换为TensorFlow张量  
y_train = tf.constant(y_data, dtype=tf.float32)  # 将y_data转换为TensorFlow张量  # 创造数据集  
buffer_size = len(data)  # Equal to the dataset size  
data = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 创建TensorFlow数据集  
data = data.shuffle(buffer_size=buffer_size).batch(len(data)).prefetch(buffer_size=tf.data.experimental.AUTOTUNE)  # 洗牌,分批,预取数据  # 定义前向模型  
def Linear():  # 定义输入层,输入形状为1  input = tf.keras.layers.Input(shape=(1,), dtype=tf.float32)  y = tf.keras.layers.Dense(1)(input)  # 定义一个输出为1的全连接层  model = tf.keras.Model(inputs=input, outputs=y)  # 创建模型  return model  model = Linear()  # 实例化模型  # 3、定义损失函数和优化器  
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)  # 使用随机梯度下降作为优化器  
model.compile(optimizer=optimizer, loss="mean_squared_error")  # 编译模型,指定损失函数为均方误差  # 4、开始迭代  
for epoch in range(1, 501):  total_loss = 0  # 初始化总损失  for batch_x, batch_y in data:  history = model.fit(x_train, y_train, verbose=0)  # 训练模型,不输出详细信息  loss = history.history["loss"][0]  # 获取当前批次的损失  total_loss += loss  # 累加损失  # 计算平均损失  avg_loss = total_loss / len(data)  # 5、显示频率设置  if epoch % 10 == 0 or epoch == 1:  # 每10个epoch或第一个epoch输出一次  print(f"epoch:{epoch}, avg_loss:{avg_loss}")  # 打印当前epoch及其平均损失  

二、模型的保存与加载

2.1、全都保存

import numpy as np
import tensorflow as tfmodel=tf.keras.models.load_model('./my_model.h5')
input_data = np.array([[1.5]])
pre = model.predict(input_data)
print(f"预测结果: {pre[0][0]}")
#1/1 [==============================] - 0s 76ms/step
#[[82.21264]]

2.2、只保存权重函数

import numpy as np
import tensorflow as tf
def linear():input = tf.keras.layers.Input(shape=(1, ), dtype=tf.float32)y = tf.keras.layers.Dense(1)(input)model = tf.keras.models.Model(inputs=input, outputs=y)return modelmodel = linear()input_data = np.array([[1.5]])model.load_weights("my_model_weights.h5")
pre = model.predict(input_data)print(pre)

2.3、只保存权重类

import numpy as np
import tensorflow as tf
class Linear(tf.keras.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 xmodel = Linear()input_data = np.array([[1.5]])_ = model(input_data)model.load_weights("my_model_weights.h5")
pre = model.predict(input_data)print(pre)

三、网络结构查看

3.1、summary

import tensorflow as tf#1.
model=tf.keras.models.load_model('my_model_weights.h5')
print(model.summary())

3.2、plot_model

请先安装

Download | Graphviz

import tensorflow as tf
model=tf.keras.models.load_model('my_model.h5')
tf.keras.utils.plot_model(model,to_file='model.png',show_dtype=True)

 

3.3、netron

更详细介绍请参考

Python----机器学习(PyTorch模型可视化:summary,netron,TensorboardX) 

3.4、tensorboard

import tensorflow as tf
import numpy as npseed = 42
tf.random.set_seed(42)# 1、散点输入,定义输入数据
data = [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1], [1.5, 75.6], [0.4, 34.0], [0.8, 62.3]]
# data列表10*2
# 转换成numpy
data = np.array(data)
x_data = data[:, 0]
y_data = data[:, 1]# 转换成TensorFlow张量
# x_train = tf.constant(x_data, dtype=tf.float32)
x_train = tf.constant(np.expand_dims(x_data, axis=1), dtype=tf.float32)
y_train = tf.constant(y_data, dtype=tf.float32)dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))dataset = dataset.shuffle(buffer_size=10)
dataset = dataset.batch(10)
# CPU取数据同时GPU、TPU训练,CPU会预先取出来一批数据,在CPU上训练无效果
dataset = dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)# 2、定义前向模型
# 方案4
def linear():input = tf.keras.layers.Input(shape=(1, ), dtype=tf.float32)y = tf.keras.layers.Dense(1)(input)model = tf.keras.models.Model(inputs=input, outputs=y)return modelmodel = linear()# 3、定义损失函数和优化器
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
model.compile(optimizer=optimizer, loss="mean_squared_error")tc=tf.keras.callbacks.TensorBoard(log_dir='logs')
model.fit(x_train,y_train,epochs=500,callbacks=[tc])

 D:\Anaconda3\python.exe D:\Anaconda3\envs\general\Scripts\tensorboard.exe --logdir=D:\xxx\xxx\logs

其中:

D:\Anaconda3\python.exe        python地址

D:\Anaconda3\envs\general\Scripts\tensorboard.exe        tensorboard的地址

--logdir=D:\xxx\xxx\logs                该文件所在的文件夹地址

 

更详细介绍请参考

Python----机器学习(PyTorch模型可视化:summary,netron,TensorboardX) 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词