多层感知机预测两个值_暴露的多层感知器预测

这篇博客介绍了如何构建一个简单的多层感知机网络,用于预测MNIST数据集的手写数字。通过一个隐藏层的网络结构,利用TensorFlow和Keras进行实现,并讨论了先决条件和代码概述。
摘要由CSDN通过智能技术生成

多层感知机预测两个值

学习深度学习

目前,我在Jason Brownlee的《 Python深度学习》一书的帮助下学习了深度学习基础知识。 它为构建各种类型的深度学习网络(如CNN,RNN等)提供了良好的实践覆盖。运行本书中的每个模型都附带提供各种指标,例如模型的准确性。 但是准确性不能提供图像识别的真实感觉。 为了对此进行改进,我用自己的实现更新了本书随附的代码示例之一,该示例示例运行带有图像文件的模型以对其进行分类。 解释此的详细步骤如下。

我们会怎样做?

本教程说明了如何构建一个由一个隐藏层组成的工作简单的多层感知器网络。 除了在MNIST数据集的手写数字上训练的工作模型之外,我们还将看到如何使用该网络对从该数据集获取的数字图像进行分类。

  • 多层感知器网络由完全连接的人工神经元的层网络组成。 在我们的情况下,它由三层构成:输入层,隐藏层和输出层。
  • MNIST数据库是美国国家标准与技术研究院混合数字手写体的缩写。 它具有60,000个示例的训练集和10,000个示例的测试集。 它用于人工神经网络的监督学习,以对手写数字进行分类。

我们该怎么做呢?

为了完成此任务,需要满足某些先决条件。 在Keras,Theano和TensorFlow(KTT)上的帖子中解释了以下许多步骤。

先决条件

  1. 支持的操作系统是
    1. Ubuntu 16.04 64位
    2. Windows 10或7 64位
  2. 分别与Anaconda 2或3一起安装的Python 2或Python 3。 有关更多详细信息,请参见KTT
  3. 与以下深度学习库一起使用。 有关更多详细信息,请参见KTT
    1. TensorFlow和Theano
    2. 凯拉斯
  4. 可以在Jupyter Notebook中运行。 请参阅此处的安装步骤

建立网络

在这种特殊情况下,多层感知器由三层构成。

  • 具有784个输入的输入层,这些输入是根据784个像素的28 x 28像素图像计算得出的。
  • 具有784个神经元和整流器激活功能的隐藏中间层
  • 具有10个输出的输出层,这些输出通过softmax激活函数为从“ 0”到“ 9”的每个数字给出了预测的可能性。

网络的整体结构

代码概述

代码结构如下。

  1. 导入适当的Python库以用于深度学习网络。
  2. 根据主机操作系统从磁盘中获取映像文件
  3. 加载要分类的图像
  4. 加载MNIST数据集并将图像像素预处理为数组
  5. 定义助手功能
  6. 准备多层感知器模型并进行编译
  7. 检查是否存在训练过的模型
  8. 如果不训练新模型,请保存并预测图像
  9. 否则加载当前模型并预测图像

代码

以下代码已全部带给您,除了已保存的模型和Jupyter Notebook外,还可以在GitHub存储库中找到,这使得可以以真正的交互方式逐个模块运行此代码。

  • 导入适当的Python库以用于深度学习网络
# Baseline MLP for MNIST dataset
import numpy
import skimage.io as io 
import os 
import platform
import getpass
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.utils import np_utils
from keras.models import model_from_json
from os.path import isfile, join

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
  • 根据主机操作系统从磁盘中获取映像文件。 在我们的情况下,它是MNIST数据集的“ 3”位数字的28 x 28像素图像
  • 加载要分类的图像
# load data
platform = platform.system()
currentUser = getpass.getuser()
currentDirectory = os.getcwd()

if platform is 'Windows':
 #path_image = 'C:\\Users\\' + currentUser
 path_image = currentDirectory 
else: 
 #path_image = '/user/' + currentUser
 path_image = currentDirectory 
fn = 'image.png'
img = io.imread(os.path.join(path_image, fn))
  • 加载MNIST数据集并将图像像素预处理为数组
# prepare arrays
X_t = []
y_t = []
X_t.append(img)
y_t.append(3)

X_t = numpy.asarray(X_t)
y_t = numpy.asarray(y_t)
y_t = np_utils.to_categorical(y_t, 10)

(X_train, y_train), (X_test, y_test) = mnist.load_data()

# flatten 28*28 images to a 784 vector for each image
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')
X_t = X_t.reshape(X_t.shape[0], num_pixels).astype('float32')

# normalize inputs from 0-255 to 0-1
X_train = X_train / 255
X_test = X_test / 255
X_t /= 255

print('X_train shape:', X_train.shape)
print ('X_t shape:', X_t.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')
print(X_t.shape[0], 'test images')

# one hot encode outputs
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)

num_classes = y_test.shape[1]
print(y_test.shape[1], 'number of classes')
  • 定义助手功能
# define baseline model
def baseline_model():
 # create model
 model = Sequential()
 model.add(Dense(num_pixels, input_dim=num_pixels, init='normal',activation='relu'))
 model.add(Dense(num_classes, init='normal', activation='softmax'))
 # Compile model
 model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])
 return model
 
def build_model(model):
 # build the model
 model = baseline_model()
 # Fit the model
 model.fit(X_train, y_train, validation_data=(X_test, y_test),nb_epoch=10, batch_size=200, verbose=2)
 return model

def save_model(model):
 # serialize model to JSON
 model_json = model.to_json()
 with open("model.json", "w") as json_file:
 json_file.write(model_json)
 # serialize weights to HDF5
 model.save_weights("model.h5")
 print("Saved model to disk")
 
def load_model():
 # load json and create model
 json_file = open('model.json', 'r')
 loaded_model_json = json_file.read()
 json_file.close()
 loaded_model = model_from_json(loaded_model_json)
 # load weights into new model
 loaded_model.load_weights("model.h5")
 if loaded_model:
 print("Loaded model")
 else:
 print("Model is not loaded correctly")
 return loaded_model

def print_class(scores):
 for index, score in numpy.ndenumerate(scores):
 number = index[1]
 print (number, "-", score)
 for index, score in numpy.ndenumerate(scores):
 if(score > 0.5):
 number = index[1]
 print ("\nNumber is: %d, probability is: %f" % (number, score))
  • 准备多层感知器模型并进行编译
model = baseline_model()
path = os.path.exists("model.json")
  • 检查是否存在训练过的模型
  • 如果不训练新模型,请保存并预测图像
if not path:
 model = build_model(model)
 save_model(model)
 # Final evaluation of the model
 scores = model.predict(X_t)
 print("Probabilities for each class\n")
 print_class(scores)
  • 否则加载当前模型并预测图像
else:
 # Final evaluation of the model
 loaded_model = load_model()
 if loaded_model is not None:
 loaded_model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])
 scores = loaded_model.predict(X_t)
 print("Probabilities for each class\n")
 print_class(scores)

如果您下载/克隆了该项目,并且已经设置了所有先决条件,那么只需在终端中键入此命令即可运行它。

python mnist_mlp_baseline.py

预测暴露

数字“ 3”的图像的预测输出如下所示。

Probabilities for each class

(0, '-', 3.4988901e-07)
(1, '-', 3.7538914e-08)
(2, '-', 0.00072528532)
(3, '-', 0.99788445)
(4, '-', 1.7879113e-08)
(5, '-', 1.3890726e-06)
(6, '-', 2.5650074e-10)
(7, '-', 2.233218e-05)
(8, '-', 0.0012537371)
(9, '-', 0.00011237688)

Number is: 3, probability is: 0.997884

资源资源

  • 如果您想看到浅层/深层神经网络的漂亮可视化图像并自己实时地使用各种参数,那么神经网络游乐场非常适合您!

翻译自: https://www.javacodegeeks.com/2016/12/multilayer-perceptron-predictions-exposed.html

多层感知机预测两个值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值