码迷,mamicode.com
首页 > 其他好文 > 详细

tf.keras实现逻辑回归和softmax多分类

时间:2021-01-22 12:24:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:panda   fit   lang   mod   inf   image   nump   compile   lib   

逻辑回归实现

相关库引用

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个参数,因此参数个数为\(4*15+4=64\)。这里使用ReLU作为激活函数;
模型第二层,有4个神经元,输入是4个参数,因此参数个数为\(4*4+4=20\)。这里使用ReLU作为激活函数;
模型第三层,有1个神经元,输入是4个参数,因此参数个数为\(1*4+1=5\)。这里使用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.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.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

tf.keras实现逻辑回归和softmax多分类

标签:panda   fit   lang   mod   inf   image   nump   compile   lib   

原文地址:https://www.cnblogs.com/miraclepbc/p/14311509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!