DL之RBM:(sklearn自带数据集为1797个样本*64个特征+5倍数据集)深度学习之BRBM模型学习+LR进行分类实现手写数字图识别

简介: DL之RBM:(sklearn自带数据集为1797个样本*64个特征+5倍数据集)深度学习之BRBM模型学习+LR进行分类实现手写数字图识别

输出结果

image.png



image.png





实现代码


from __future__ import print_function

print(__doc__)

import numpy as np              

import matplotlib.pyplot as plt  

from scipy.ndimage import convolve

from sklearn import linear_model, datasets, metrics  

from sklearn.cross_validation import train_test_split

from sklearn.neural_network import BernoulliRBM  

from sklearn.pipeline import Pipeline            

def nudge_dataset(X, Y):  

direction_vectors = [

   [[0, 1, 0],[0, 0, 0],[0, 0, 0]],

   [[0, 0, 0],[1, 0, 0],[0, 0, 0]],

   [[0, 0, 0],[0, 0, 1],[0, 0, 0]],

   [[0, 0, 0],[0, 0, 0],[0, 1, 0]]

   ]

shift = lambda x, w: convolve(x.reshape((8, 8)), mode='constant',weights=w).ravel()

X = np.concatenate([X] +

[np.apply_along_axis(shift, 1, X, vector)

for vector in direction_vectors])

Y = np.concatenate([Y for _ in range(5)], axis=0)

return X, Y

digits = datasets.load_digits()

X = np.asarray(digits.data, 'float32')

X, Y = nudge_dataset(X, digits.target)  

X = (X - np.min(X, 0)) / (np.max(X, 0) + 0.0001)

X_train, X_test, Y_train, Y_test = train_test_split(X, Y,test_size=0.2,random_state=0)

logistic = linear_model.LogisticRegression()

rbm = BernoulliRBM(random_state=0, verbose=True)

classifier = Pipeline(steps=[('rbm', rbm), ('logistic', logistic)])

rbm.learning_rate = 0.06  

rbm.n_iter = 20

# More components tend to give better prediction performance, but larger fitting time

rbm.n_components = 100

logistic.C = 6000.0

classifier.fit(X_train, Y_train)  

logistic_classifier = linear_model.LogisticRegression(C=100.0)

logistic_classifier.fit(X_train, Y_train)

print()

print("Logistic regression using RBM features:\n%s\n" % (

   metrics.classification_report(

       Y_test,classifier.predict(X_test)  

       )

   ))

print("Logistic regression using raw pixel features:\n%s\n" % (

metrics.classification_report(

Y_test,

logistic_classifier.predict(X_test))))

plt.figure(figsize=(4.2, 4))

for i, comp in enumerate(rbm.components_):

plt.subplot(10, 10, i + 1)

plt.imshow(comp.reshape((8, 8)), cmap=plt.cm.gray_r,

interpolation='nearest')

plt.xticks(())

plt.yticks(())

plt.suptitle('100 components extracted by RBM', fontsize=16)

plt.subplots_adjust(0.08, 0.02, 0.92, 0.85, 0.08, 0.23)

plt.show()


相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效图像分类模型:深度学习在处理大规模视觉数据中的应用
随着数字化时代的到来,海量的图像数据被不断产生。深度学习技术因其在处理高维度、非线性和大规模数据集上的卓越性能,已成为图像分类任务的核心方法。本文将详细探讨如何构建一个高效的深度学习模型用于图像分类,包括数据预处理、选择合适的网络架构、训练技巧以及模型优化策略。我们将重点分析卷积神经网络(CNN)在图像识别中的运用,并提出一种改进的训练流程,旨在提升模型的泛化能力和计算效率。通过实验验证,我们的模型能够在保持较低计算成本的同时,达到较高的准确率,为大规模图像数据的自动分类和识别提供了一种有效的解决方案。
|
1月前
|
机器学习/深度学习 数据采集 PyTorch
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
|
2天前
|
机器学习/深度学习 传感器 数据可视化
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
15 1
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
|
7天前
|
机器学习/深度学习 API 算法框架/工具
R语言深度学习:用keras神经网络回归模型预测时间序列数据
R语言深度学习:用keras神经网络回归模型预测时间序列数据
16 0
|
7天前
|
机器学习/深度学习 数据采集 TensorFlow
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
26 0
|
7天前
|
机器学习/深度学习 并行计算 算法
R语言深度学习不同模型对比分析案例
R语言深度学习不同模型对比分析案例
26 0
|
9天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
14 0
|
11天前
|
机器学习/深度学习 自然语言处理 算法
探索深度学习中的序列建模新范式:Mamba模型的突破与挑战
【4月更文挑战第13天】Mamba模型,一种新型序列建模架构,通过选择性状态空间提高处理长序列数据的效率,实现线性时间复杂度。在语言、音频和DNA序列建模中展现优秀性能,尤其在大规模预训练中超越Transformer。然而,面对连续信号数据时可能不及LTI模型,且模型参数优化及硬件实现具有挑战性。
36 5
探索深度学习中的序列建模新范式:Mamba模型的突破与挑战
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
|
21天前
|
机器学习/深度学习 数据采集 算法
深度学习在医学影像识别中的应用与挑战
医学影像识别是深度学习技术在医疗领域中的重要应用之一。本文将探讨深度学习在医学影像识别中的应用现状、挑战以及未来发展方向。通过对深度学习算法的介绍和医学影像识别的案例分析,展示了深度学习在提高医学影像诊断准确性、降低医疗成本、改善医疗服务质量等方面的潜力。同时,也指出了在医学影像识别中面临的数据质量、隐私保护、模型可解释性等挑战,并探讨了未来发展中需要解决的技术问题和可能的解决方案。