【tensorflow】连续输入的线性回归模型训练代码

【tensorflow】连续输入的感知机模型训练

  查看本系列三种模型写法:
  【tensorflow】连续输入的线性回归模型训练代码
  【tensorflow】连续输入的神经网络模型训练代码
  【tensorflow】连续输入+离散输入的神经网络模型训练代码

全部代码 - 复制即用

from sklearn.model_selection import train_test_split
import tensorflow as tf
import numpy as np
from keras import Input, Model, Sequential
from keras.layers import Dense, concatenate, Embedding, LSTM
from sklearn.preprocessing import StandardScaler
from tensorflow import keras

def get_data():
    # 设置随机种子,以确保结果可复现(可选)
    np.random.seed(0)

    # 生成随机数据
    data = np.random.rand(10000, 10)
    
    # 正则化数据
    scaler = StandardScaler()
    data = scaler.fit_transform(data)

    # 生成随机数据
    target = np.random.rand(10000, 1)

    return train_test_split(data, target, test_size=0.1, random_state=42)

data_train, data_val, target_train, target_val = get_data()

# 迭代轮次
train_epochs = 10
# 学习率
learning_rate = 0.0001
# 批大小
batch_size = 200

# 定义模型
with tf.name_scope("Model"):
    x = tf.placeholder(tf.float32, [None,10]) # 10个特征数据(10列)
    y = tf.placeholder(tf.float32, [None, 1])

    d = tf.Variable(tf.random_normal([10,10], stddev=0.01))
    w = tf.Variable(tf.random_normal([10,1], stddev=0.01))

    # b 初始化值为 1.0
    a = tf.Variable(1.0)
    b = tf.Variable(1.0)

    k = tf.matmul(x, d) + a
    pred = tf.matmul(k, w) + b

#损失函数
loss_function = tf.reduce_mean(tf.square(y-pred))
# 创建优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

#3生成会话,训练STEPS轮
with tf.Session() as sess:
    # 初始化参数
    init = tf.global_variables_initializer()
    sess.run(init)


    # 训练模型
    STEPS = 1000 #3000
    for i in range(STEPS):
        start = (i*batch_size) % 4
        end =  start + batch_size
        #sess.run(optimizer, feed_dict={x: X[start:end], y_: Y_[start:end]})
    
        if i % 100 == 0:
            total_loss = sess.run(loss_function, feed_dict={x: data_train, y: target_train})
            print("After %d training step(s), loss_mse on all data is %g" % (i, total_loss))            
        sess.run(optimizer, feed_dict={x: data_val, y: target_val})

训练输出

  模型训练过程中的输出如下:
在这里插入图片描述

代码介绍

  get_data函数用于生成随机的训练和验证数据集。首先使用np.random.rand生成一个形状为(10000, 10)的随机数据集,来模拟10维的连续输入,然后使用StandardScaler对数据进行标准化。再生成一个(10000,1)的target,表示最终拟合的目标分数。最后使用train_test_split函数将数据集划分为训练集和验证集。

  由于target是浮点数,所以我们这个任务就是回归任务了。

  在定义模型时,使用tf.placeholder定义占位符,用于传入输入数据和目标数据。定义变量d、w、a和b作为模型的权重和偏置。使用tf.matmul进行矩阵乘法和加法操作,得到预测值pred。

可以尝试改改模型,换一换激活函数。

  定义损失函数为均方差(MSE),使用梯度下降优化器进行参数更新。

  在tf.Session中创建会话,通过tf.global_variables_initializer初始化模型的变量。然后进行训练,迭代STEPS轮。在每一轮训练中,通过sess.run运行优化器进行参数更新,并计算训练集上的损失。每训练100轮,打印出当前轮次的损失值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征途黯然.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值