【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轮,打印出当前轮次的损失值。