keras(3.4)绘制损失函数曲线

本文介绍了一种在MNIST数据集上训练简单深度神经网络的方法,通过20轮的训练,实现了98.40%的测试准确率。每轮训练仅需2秒,适用于K520GPU。文章详细展示了数据预处理、模型搭建、参数设置及训练过程,并提供了训练损失和验证损失的可视化图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-- coding: utf-8 --

‘’‘Trains a simple deep NN on the MNIST dataset.
Gets to 98.40% test accuracy after 20 epochs
(there is a lot of margin for parameter tuning).
2 seconds per epoch on a K520 GPU.
‘’’

from future import print_function

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
import matplotlib.pyplot as plt

batch_size = 128
num_classes = 10
epochs = 20

the data, shuffled and split between train and test sets

(x_train, y_train), (x_test, y_test) = mnist.load_data()

(x_train, y_train), (x_test, y_test) = mnist.load_data(path=’/home/duchao/下载/mnist.npz’)

import numpy as np

path = ‘/home/duchao/下载/mnist.npz’

f = np.load(path)

x_train, y_train = f[‘x_train’], f[‘y_train’]

x_test, y_test = f[‘x_test’], f[‘y_test’]

f.close()

x_train = x_train.reshape(60000, 784).astype(‘float32’)
x_test = x_test.reshape(10000, 784).astype(‘float32’)
x_train /= 255
x_test /= 255
print(x_train.shape[0], ‘train samples’)
print(x_test.shape[0], ‘test samples’)

convert class vectors to binary class matrices

label为0~9共10个类别,keras要求格式为binary class matrices

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

add by hcq-20171106

Dense of keras is full-connection.

model = Sequential()
model.add(Dense(512, activation=‘relu’, input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation=‘relu’))
model.add(Dropout(0.2))
model.add(Dense(num_classes, activation=‘softmax’))

model.summary()

model.compile(loss=‘categorical_crossentropy’,
optimizer=RMSprop(),
metrics=[‘accuracy’])

history = model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print(‘Test loss:’, score[0])
print(‘Test accuracy:’, score[1])

history_dict=history.history
loss_value=history_dict[“loss”]
val_loss_value=history_dict[“val_loss”]

epochs=range(1,len(loss_value)+1)
plt.plot(epochs,loss_value,“bo”,label=“Training loss”)
plt.plot(epochs,val_loss_value,“b”,label=“Validation loss”)
plt.xlabel(“epochs”)
plt.ylabel(“loss”)
plt.legend()
plt.show()

### 绘制或理解机器学习中的损失函数曲线 在机器学习领域,损失函数用于衡量模型预测值与真实值之间的差异。为了更好地理解和优化模型性能,通常会绘制损失函数随训练过程变化的曲线。 #### 1. 损失函数的作用 损失函数不仅能够评估模型的表现,还为参数调整提供方向[^2]。不同的模型可能需要不同类型的损失函数,因此选择合适的损失函数至关重要。 #### 2. 如何绘制损失函数曲线绘制损失函数曲线,需记录每次迭代后的损失值并将其可视化: - **数据准备**: 记录每轮训练结束时计算得到的损失值。 - **绘图工具**: 使用Python库如Matplotlib或Seaborn完成图形绘制。 以下是基于Python的一个简单示例代码片段,展示如何绘制损失函数曲线: ```python import matplotlib.pyplot as plt def plot_loss_curve(losses): """ 绘制损失函数曲线 参数: losses (list): 存储各次迭代中损失值的列表 """ epochs = range(1, len(losses)+1) plt.plot(epochs, losses, 'b-', label='Training Loss') plt.title('Loss Curve Over Epochs') plt.xlabel('Epochs') plt.ylabel('Loss Value') plt.legend() plt.grid(True) plt.show() # 假设这是从某次实验获得的损失序列 example_losses = [0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2] plot_loss_curve(example_losses) ``` 此脚本定义了一个`plot_loss_curve`函数,它接受一个存储历次迭代损失值的列表作为输入,并生成相应的图表。 #### 3. 理解损失函数曲线的意义 观察损失函数曲线可以帮助我们判断模型的学习状态以及是否存在过拟合等问题: - 如果曲线持续下降,则表明模型正在逐步改善其表现; - 若曲线趋于平缓甚至上升,则可能是遇到了局部最优或者出现了其他问题,比如欠拟合或过拟合现象。 #### 4. 不同类型损失函数的特点 不同类型的数据集和任务适合采用特定形式的损失函数。例如二分类问题常用交叉熵损失;回归分析则多选用均方误差(MSE)。这些差异决定了最终形成的损失曲线条形各异。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值