tf.keras实现逻辑回归和softmax多分类
逻辑回归实现
相关库引用
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
加载数据
data = pd.read_csv("E:/datasets/dataset/credit-a.csv", header = None) # 获取数据
x = data.iloc[:, :-1]
y = data.iloc[:, -1].replace(-1, 0)
data.head()
观察发现,最后一列(label)非0即1。因此,这是一个二分类问题。可以考虑把-1全都替换成0
定义模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4, input_shape = (15, ), activation = 'relu'))
model.add(tf.keras.layers.Dense(4, activation = 'relu'))
model.add(tf.keras.layers.Dense(1, activation = 'sigmoid'))
model.summary()
这个模型第一层,有4个神经元,因为输入是15个参数,因此参数个数为。这里使用ReLU作为激活函数;
模型第二层,有4个神经元,输入是4个参数,因此参数个数为。这里使用ReLU作为激活函数;
模型第三层,有1个神经元,输入是4个参数,因此参数个数为。这里使用Sigmoid作为激活函数。
这里总共有89个参数
模型编译
model.compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = ['acc'] # 设置显示的参数
)
这里是二分类问题,因此损失函数可以设置为binary_crossentropy
训练模型
history = model.fit(x, y, epochs = 1000) # 训练1000次
下面我们来看一下模型的一些参数
history.history.keys()
发现有loss和acc两个参数
然后,我们再画出随着训练轮数的增加,loss和acc的变化曲线图
plt.plot(history.epoch, history.history.get('loss'))
plt.plot(history.epoch, history.history.get('acc'))
loss变化曲线图:
acc变化曲线图:
softmax多分类实现
加载数据
(train_image, train_label), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data() # 获取数据
plt.imshow(train_image[0]) # 显示第一张图片
数据归一化:
train_image = train_image / 255
test_image = test_image / 255
定义模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28, 28)))
model.add(tf.keras.layers.Dense(128, activation = 'relu'))
# model.add(tf.keras.layers.Dropout(0.5)) 添加一个dropout层,防止过拟合
model.add(tf.keras.layers.Dense(10, activation = 'softmax'))
因为输入图像是二维的(28*28),因此需要先将其变换成一维向量。
第一层128个神经元,激活函数为ReLU
第二层10个神经元,激活函数为softmax
模型编译
model.compile(
optimizer = 'adam',
loss = 'sparse_categorical_crossentropy',
metrics = ['acc']
)
这里因为是多分类问题,并且标签是一般的数值标签,因此损失函数使用sparse_categorical_crossentropy
训练模型
model.fit(train_image, train_label, epochs = 10) # 训练10次
# model.fit(train_image, train_label, epochs = 10, validation_data = (test_image, test_label)) # validation_data可以同时查看测试集的正确率和损失
模型评价
在测试集上评估训练的模型
model.evaluate(test_image, test_label)
one-hot编码
one-hot编码的转换
train_label_onehot = tf.keras.utils.to_categorical(train_label)
test_label_onehot = tf.keras.utils.to_categorical(test_label)
模型的编译
model.compile(
optimizer = 'adam',
loss = 'categorical_crossentropy',
metrics = ['acc']
)
因为使用的是one-hot编码,因此损失函数使用categorical-crossentropy
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用