测试神经网络

Python实现简单的深度学习实践 想象一下,如果你是一位探险家,那么Python就是你的地图与指南针,帮助你在这片充满未知的深度学习丛林中找到前进的方向。让我们一起探索新奇的事物,分享生活的点滴,让这个小角落成为我们共同的精神家园。说到创建神经网络,很多人可能会觉得这是一项艰巨的任务,但实际上,在Python的帮助下,这一切变得异常简单。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。 阅读详情

 

深度学习有很多参数要调:大部分都是拍脑袋的。所以测试特别重要:本章我们讨论几种测试方法。本章将:

  • 使用Keras进行自动验证
  • 使用Keras进行手工验证
  • 使用Keras进行K折交叉验证

我们开始吧。

1 口算神经网络

创建神经网络时有很多参数:很多时候可以从别人的网络上抄,但是最终还是需要一点点做实验。无论是网络的拓扑结构(层数、大小、每层类型)还是小参数(损失函数、激活函数、优化算法、训练次数)等。

一般深度学习的数据集都很大,数据有几十万乃至几亿个。所以测试方法至关重要。

2 分割数据

数据量大和网络复杂会造成训练时间很长,所以需要将数据分成训练、测试或验证数据集。Keras提供两种办法:

  1. 自动验证
  2. 手工验证

2.1 自动验证

Keras可以将数据自动分出一部分,每次训练后进行验证。在训练时用validation_split参数可以指定验证数据的比例,一般是总数据的20%或者33%。下面的代码在第七章上加入了自动验证:

# MLP with automatic validation set
from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model
model.fit(X, Y, validation_split=0.33, nb_epoch=150, batch_size=10)

训练时,每轮会显示训练和测试数据的数据:

Epoch 145/150
514/514 [==============================] - 0s - loss: 0.4885 - acc: 0.7743 - val_loss:
    0.5016 - val_acc: 0.7638
Epoch 146/150
514/514 [==============================] - 0s - loss: 0.4862 - acc: 0.7704 - val_loss:
    0.5202 - val_acc: 0.7323
Epoch 147/150
514/514 [==============================] - 0s - loss: 0.4959 - acc: 0.7588 - val_loss:
    0.5012 - val_acc: 0.7598
Epoch 148/150
514/514 [==============================] - 0s - loss: 0.4966 - acc: 0.7665 - val_loss:
    0.5244 - val_acc: 0.7520
Epoch 149/150
514/514 [==============================] - 0s - loss: 0.4863 - acc: 0.7724 - val_loss:
    0.5074 - val_acc: 0.7717
Epoch 150/150
514/514 [==============================] - 0s - loss: 0.4884 - acc: 0.7724 - val_loss:
    0.5462 - val_acc: 0.7205

2.2 手工验证

Keras也可以手工进行验证。我们定义一个train_test_split函数,将数据分成2:1的测试和验证数据集。在调用fit()方法时需要加入validation_data参数作为验证数据,数组的项目分别是输入和输出数据。

# MLP with manual validation set
from keras.models import Sequential
from keras.layers import Dense
from sklearn.cross_validation import train_test_split
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# split into 67% for train and 33% for test
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed) # create model
model = Sequential()
model.add(Dense(12, input_dim=8, init='uniform', activation='relu'))
model.add(Dense(8, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train, y_train, validation_data=(X_test,y_test), nb_epoch=150, batch_size=10)

和自动化验证一样,每轮训练后,Keras会输出训练和验证结果:

...
Epoch 145/150
514/514 [==============================] - 0s - loss: 0.5001 - acc: 0.7685 - val_loss:
    0.5617 - val_acc: 0.7087
Epoch 146/150
514/514 [==============================] - 0s - loss: 0.5041 - acc: 0.7529 - val_loss:
    0.5423 - val_acc: 0.7362
Epoch 147/150
514/514 [==============================] - 0s - loss: 0.4936 - acc: 0.7685 - val_loss:
    0.5426 - val_acc: 0.7283
Epoch 148/150
514/514 [==============================] - 0s - loss: 0.4957 - acc: 0.7685 - val_loss:
    0.5430 - val_acc: 0.7362
Epoch 149/150
514/514 [==============================] - 0s - loss: 0.4953 - acc: 0.7685 - val_loss:
    0.5403 - val_acc: 0.7323
Epoch 150/150
514/514 [==============================] - 0s - loss: 0.4941 - acc: 0.7743 - val_loss:
    0.5452 - val_acc: 0.7323

3 手工K折交叉验证

机器学习的金科玉律是K折验证,以验证模型对未来数据的预测能力。K折验证的方法是:将数据分成K组,留下1组验证,其他数据用作训练,直到每种分发的性能一致。

深度学习一般不用交叉验证,因为对算力要求太高。例如,K折的次数一般是5或者10折:每组都需要训练并验证,训练时间成倍上升。然而,如果数据量小,交叉验证的效果更好,误差更小。

scikit-learn有StratifiedKFold类,我们用它把数据分成10组。抽样方法是分层抽样,尽可能保证每组数据量一致。然后我们在每组上训练模型,使用verbose=0参数关闭每轮的输出。训练后,Keras会输出模型的性能,并存储模型。最终,Keras输出性能的平均值和标准差,为性能估算提供更准确的估计:

# MLP for Pima Indians Dataset with 10-fold cross validation
from keras.models import Sequential
from keras.layers import Dense
from sklearn.cross_validation import StratifiedKFold
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# define 10-fold cross validation test harness
kfold = StratifiedKFold(y=Y, n_folds=10, shuffle=True, random_state=seed)
cvscores = []
for i, (train, test) in enumerate(kfold):
    # create model
    model = Sequential()
    model.add(Dense(12, input_dim=8, init='uniform', activation='relu')) model.add(Dense(8, init='uniform', activation='relu'))
    model.add(Dense(1, init='uniform', activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Fit the model
model.fit(X[train], Y[train], nb_epoch=150, batch_size=10, verbose=0)
    # evaluate the model
    scores = model.evaluate(X[test], Y[test], verbose=0)
    print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) cvscores.append(scores[1] * 100)
    print("%.2f%% (+/- %.2f%%)" % (numpy.mean(cvscores), numpy.std(cvscores)))

输出是:

acc: 77.92%
acc: 79.22%
acc: 76.62%
acc: 77.92%
acc: 75.32%
acc: 74.03%
acc: 77.92%
acc: 71.43%
acc: 71.05%
acc: 75.00%
75.64% (+/- 2.67%)

每次循环都需要重新生成模型,使用对应的数据训练。下一章我们用scikit-learn直接使用Keras的模型。

4 总结

本章关于测试神经网络的性能。总结一下:

  • 如何自动将数据分成训练和测试组
  • 如何人工对数据分组
  • 如何使用K折法测试性能
神经网络测试样本的选择,如何测试神经网络模型 训练样本是用来训练学习机的,测试样本是学习机要识别的对象。比如你想让一台电脑能识别茶杯,首先你要准备一个茶杯(训练样本),然后把茶杯给计算机看(数据输入),并告诉电脑说这样的东东是茶杯(期望输出),电脑看到茶杯后它认为是花盆,但看到你的期望是茶杯,他就不停训练自己这个是茶杯不是花盆,直到电脑他自己认为茶杯是茶杯后结束(这个过程叫学习),然后你把另一只茶杯(测试样本)放在电脑面前,并问他这是什么东东,电脑通过运算后告诉你是茶杯(这个过程叫识别)。神经网络的原理是输入层的数据经过多个神经元后的输出值尽量接近给出 阅读详情

相关推荐

神经网络训练的一般步骤,神经网络的训练与测试

BP网的工作原理是我们拿一批训练数据(输入样本和期望输出)训练出一个学习到这些样本特征的神经网络,你可以理解为是具有那些权值的神经网络,然后我们拿新的样本过来,若你需要的是去检测这个神经网络,那么要给的新样本必须没包含在训练样本中,而且也必须有输入和期望输出。deeplearinig就是神经网络的一类,就是解决的训练问题的深层神经网络,所以你这问题“深度学习会代替神经网络‘就不对,BP么,BP有自己的优势,也是很成熟的算法,做手写识别等等效果已经商用化了,不会被轻易替代。第三层将能够识别更加复杂的形状。..

aifans_bert的博客 1411

第8章 测试神经网络

第8章 测试神经网络 深度学习有很多参数要调:大部分都是拍脑袋的。所以测试特别重要:本章我们讨论几种测试方法。本章将: 使用Keras进行自动验证 使用Keras进行手工验证 使用Keras进行K折交叉验证 我们开始吧。 8.1 口算神经网络 创建神经网络时有很多参数:很多时候可以从别人的网络上抄,但是最终还是需要一点点做实验。无论是网络的拓扑结构(...

weixin_34375251的博客 532

神经网络测试结果很差,该怎么做?

当我们编程实现了神经网络模型,将模型用于测试集时,经常会发现测试的准确率非常的低,神经网络层数很深,通常我们不容易判断具体的梯度下降求解参数的过程,那我们该怎么办呢?我从李宏毅的机器学习视频中总结的办法!!小程序亲身体验过!首先要明白,测试集上的准确率低并不一定是过拟合。有可能在训练集上准确率就很低,也就是说你的模型压根没有训练好!!所以:首先,要用训练好的模型在训练集上跑一遍,如果在训练集上准确...

小哈的博客 3万+

神经网络模型训练及验证套路

神经网络模型训练及验证套路

ting 2344

创建三层神经网络,并对mnist数据进行训练和测试。

创建三层神经网络的类,并对mnist数据进行训练和测试。 代码 第一步 导入库 import sys,os sys.path.append(os.pardir) import numpy as np import matplotlib.pyplot as plt from mnist import load_mnist from three_layer_net import ThreeLayerNet mnist 、three_layer_net 需自己编写,不是Python自带的库。需要的话,可以在网上

dead_rabbit的博客 1774

Python 深度学习实战:人工智能艺术

1.背景介绍 深度学习是人工智能领域的一个重要分支,它通过模拟人类大脑中的神经网络来解决复杂的问题。深度学习已经应用于图像识别、自然语言处理、语音识别等多个领域,并取得了显著的成果。Python 是深度学习领域的主要编程语言,因为它的易用性、强大的库支持和丰富的生态系统。 本文将介绍 Python 深度学习实战的核心概念、算法原理、具体操

AI架构师小马 292

神经网络的训练和测试 python

承接上一节,神经网络需要训练,那么训练集来自哪?测试的数据又来自哪?   《python神经网络编程》一书给出了训练集,识别图片中的数字。测试集的链接如下:   https://raw.githubusercontent.com/makeyourownneuralnetwork/makeyourownneuralnetwork/master/mnist_dataset/mnist_test_1...

闲云野鹤的专栏 4354

Python 深度学习实战:生成对抗网络

1.背景介绍 生成对抗网络(GANs)是一种深度学习模型,它们可以生成高质量的图像、音频、文本等。这些模型可以用于各种应用,如图像生成、图像补充、图像风格转移等。在本文中,我们将探讨生成对抗网络的核心概念、算法原理、具体操作步骤以及数学模型公式。我们还将通过具体的代码实例来解释这些概念和算法。最后,我们将讨论生成对抗网络的未来发展趋势和挑战。

AI架构师小马 534

神经网络训练集和测试集,神经网络验证集作用

假设现在有12个月的数据,从1月-12月。方案一:设置1月-6月为训练集,7月-9月为测试集,10月-12月为验证集;方案二:设置1月-6月为训练集,7月-9月为验证集,10月-12月为测试集。训练集:是用于训练的样本集合,主要用来训练神经网络中的参数。验证集:用于验证模型性能的样本集合,不同神经网络在训练集上训练结束后,通过验证集来比较判断各个模型的性能,这里的不同模型主要是指对应不同超参数的神经网络,也可以指完全不同结构的神经网络。测试集:对于训练完成的神经网络,测试集用于客观的评价神经网络的性能。扩展

aifamao6的博客 8753

神经网络在线测试平台Python

在使用神经网络之前,对其进行测试和调试是非常重要的,以确保其在实际应用中的准确性和效果。在使用神经网络之前,对其进行测试和调试是非常重要的,以确保其在实际应用中的准确性和效果。请注意,这是一个简化的示例,并且在实际应用中可能需要进行更多的配置和调整。神经网络的测试和调试是一个迭代的过程,需要不断尝试和优化,以获得最佳的性能和结果。方法来指定损失函数(在这里我们使用交叉熵作为损失函数)、优化器(在这里我们使用Adam优化器)和评估指标(在这里我们使用准确性作为评估指标)。接下来,我们需要编译和训练模型。

CodeShiftZ的博客 228

三层BP神经网络的数据训练和测试matlab测试

三层BP神经网络是一种基础的人工神经网络结构,用于解决分类和回归等问题。本文将详细介绍三层BP神经网络的原理、实现过程以及在不同应用领域的应用。三层BP神经网络是一个基础且有效的神经网络结构,在数据训练和测试中有广泛应用。通过前向传播和反向传播,神经网络能够自动学习特征并进行准确的分类和预测,具有重要的研究和应用价值。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 260

【亲测免费】 NEUZZ:神经网络辅助的模糊测试工具

NEUZZ:神经网络辅助的模糊测试工具 项目介绍 NEUZZ是一款基于神经网络辅助的模糊测试工具,由哥伦比亚大学的研究团队开发,并在2019年的IEEE安全与隐私研讨会(S&P)上发表。NEUZZ通过结合神经网络技术,显著提升了模糊测试的效率和覆盖率,能够更有效地发现软件中的漏洞。 项目技术分析 NEUZZ的核心技术在于其神经网络辅助的模糊测试方法。传统的模糊测试工具主要依赖随机或启发式的...

gitblog_00756的博客 952

图神经网络实战(11)——Weisfeiler-Leman测试

在本节中,我们定义了图神经网络 (Graph Neural Networks, GNN) 的表达能力,这一定义基于 WL 测试算法,它可以输出图的规范形式。虽然这种算法并不完美,但可以区分大多数图结构。

盼小辉丶的博客 9485

神经网络的消融测试:补偿性伪装

原文:towardsdatascience.com/ablation-testing-neural-networks-the-compensatory-masquerade-ba27d0037a88?

龙哥盟 385

定制PYNQ的overlay

一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。             (3)在左侧的菜单栏里选择Sourc...

bramblewalls的博客 1万+

滞回比较器电路详细分析

滞回比较器是一种用于检测两个不同电压值并使比较器输出高电平或低电平的电路。滞回比较器的特点是具有迟滞特性,即当输入电压高于某一阈值时,比较器输出高电平,当输入电压低于另一阈值时,比较器输出低电平,而在这两个阈值之间,比较器的输出保持不变。比较器通常有两个模拟电压输入端UIN+和UIN-以及一个数字状态输出端UOUT。当UIN+大于UIN-时,UOUT为高电平;当UIN+小于UIN-时,UOUT为低电平。根据具体的系统定义,这两种电位的具体数值可以有所不同。

LuDvei的博客 2万+

python自训练神经网络_tensorflow学习笔记之简单的神经网络训练和测试

本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下刚开始学习tf时,我们从简单的地方开始。卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第一个例子,就从神经网络开始。神经网络没有卷积功能,只有简单的三层:输入层,隐藏层和输出层。数据从输入层输入,在隐藏层进行加权变换,最后在输出层进行输出。输出的时候,我们可以使用softmax回归,输出属...

weixin_39730911的博客 411

Grey Hack v0.7.3618 保姆级教程:手把手教你用metaxploit.so写一个自动提权脚本

本文详细介绍了如何在Grey Hack v0.7.3618中使用metaxploit.so库编写自动化提权脚本。从环境准备到核心功能解析,再到漏洞利用链构建和权限提升的智能处理,手把手教你掌握游戏中的高级黑客技巧。通过多库联合利用和错误处理优化,提升脚本的效率和成功率。

weixin_42537919的博客 394

如何保存训练好的神经网络直接进行测试-TensorFlow模型持久化

本文代码可在https://github.com/TimeIvyace/MNIST-TensorFlow.git中下载,文件夹为train_improved2,文件夹中一共三个py程序,同时运行mnist_train.py(用于训练)和mnist_eval.py(用于测试)即可。 注意:使用代码需要修改MNIST数据集存储位置以及神经网络存储位置。 为了让神经网络训练结果可以复用,需要将训练的

疯狂的兔子 3万+

FunASR语音识别服务在Win11上的Docker部署避坑指南:模型配置与热词优化

本文详细介绍了在Windows 11系统上通过Docker部署FunASR语音识别服务的完整流程,包括环境准备、模型配置、热词优化及常见问题解决方案。特别针对Win11环境下的特殊配置和性能调优提供了实用指南,帮助开发者高效搭建高性能语音识别服务。

e3f4g5的博客 222

termux 安装 rockylinux

往找最新的文件目录,选择ARM版本的image。或者直接查看目录或者国内阿里云镜像,按照cpu架构(安卓9手机一般是aarch64arm最新架构),获取镜像地址,以及checksum里的SHA256信息更新到以下rocky9.sh脚本,如果不需要直接使用即可。

欢迎来到别往的博客 982

解决卷积神经网络测试集正确率低

解决卷积神经网络测试集正确率低问题描述可能的原因最终的原因结论 问题描述 在运用卷积神经网络进行图像识别的过程中,将数据集分为训练集与验证集,首先进行模型的训练,最终模型在训练集与验证集上的正确率均达到0.999,将训练好的模型保存到本地,测试过程中直接读取本地模型对视频帧进行图像识别,正确率却远达不到0.999,即模型在训练集与验证集上的正确率很高,但在测试集上的正确率却很低。 可能的原因 测试集与训练集的图片尺寸不一致; 测试集与训练集的数组维度不一致; 数据未归一化,训练过程中图像为归一化数据,即

lazyn的博客 1万+

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5388

‌生物神经网络VS人工神经网络:测试方法论跨界启示录

本文探讨生物神经网络(BNN)与人工神经网络(ANN)的跨界比较对软件测试的启示。通过分析两者在结构、学习机制和鲁棒性方面的差异,提出测试方法论的创新路径:构建动态适应性测试策略,设计容错测试架构,以及利用AI优化测试生命周期。研究显示,借鉴BNN的自然智慧可提升测试效率50%,推动测试从被动检测转向主动预防。建议从业者试点"神经启发测试"并加强跨学科培训,以应对AI时代测试新挑战。

2501_94438416的博客 375

数据仓库的复用性:设计和构建一个高复用性的数仓

数据仓库的复用性是指在数据仓库的设计和使用过程中,能够实现数据、模型、流程、工具等多个层面的重复利用,减少重复开发,提高开发效率,降低维护成本,并增强灵活性和可扩展性。

z1941563559的博客 1305

YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题

本文记录的是改进YOLOv11的损失函数,将其替换成Slide Loss,并详细说明了优化原因,注意事项等。Slide Loss函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss来提高模型在处理复杂样本时的性能。

Limiiiing的博客 4565
上一篇: 使用Keras开发神经网络
下一篇: Keras训练和识别实例
我是谁??
博客等级 码龄11年 242粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值