为什么接入本地融合网神经就出问题

Python013

为什么接入本地融合网神经就出问题,第1张

本人深度学习小白,想用matlab做两组传感器数据的神经网络特征融合,不知道我的想法对不对,我在工具箱里这么编写了一个基于AlexNet的神经网络模型,两组数据经过相同的卷积层,再通过一个additionLayer连接层绑两组数据连接起来,再通过三个全连接层,最后输出三个分类。

代码是通过深度学习工具箱生成的,如下

lgraph = layerGraph()

tempLayers = [

imageInputLayer([227 227 3],"Name","data1")

convolution2dLayer([11 11],96,"Name","conv1_1","BiasLearnRateFactor",2,"Stride",[4 4])

reluLayer("Name","relu1_1")

crossChannelNormalizationLayer(5,"Name","norm1_1","K",1)

maxPooling2dLayer([3 3],"Name","pool1_1","Stride",[2 2])

groupedConvolution2dLayer([5 5],128,2,"Name","conv1_2","BiasLearnRateFactor",2,"Padding",[2 2 2 2])

reluLayer("Name","relu1_2")

crossChannelNormalizationLayer(5,"Name","norm1_2","K",1)

maxPooling2dLayer([3 3],"Name","pool1_2","Stride",[2 2])

convolution2dLayer([3 3],384,"Name","conv1_3","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_3")

groupedConvolution2dLayer([3 3],192,2,"Name","conv1_4","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_4")

groupedConvolution2dLayer([3 3],128,2,"Name","conv1_5","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu1_5")

maxPooling2dLayer([3 3],"Name","pool1_5","Stride",[2 2])]

lgraph = addLayers(lgraph,tempLayers)

tempLayers = [

imageInputLayer([227 227 3],"Name","data2")

convolution2dLayer([11 11],96,"Name","conv2_1","BiasLearnRateFactor",2,"Stride",[4 4])

reluLayer("Name","relu2_1")

crossChannelNormalizationLayer(5,"Name","norm2_1","K",1)

maxPooling2dLayer([3 3],"Name","pool2_1","Stride",[2 2])

groupedConvolution2dLayer([5 5],128,2,"Name","conv2_2","BiasLearnRateFactor",2,"Padding",[2 2 2 2])

reluLayer("Name","relu2_2")

crossChannelNormalizationLayer(5,"Name","norm2_2","K",1)

maxPooling2dLayer([3 3],"Name","pool2_2","Stride",[2 2])

convolution2dLayer([3 3],384,"Name","conv2_3","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_3")

groupedConvolution2dLayer([3 3],192,2,"Name","conv2_4","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_4")

groupedConvolution2dLayer([3 3],128,2,"Name","conv2_5","BiasLearnRateFactor",2,"Padding",[1 1 1 1])

reluLayer("Name","relu2_5")

maxPooling2dLayer([3 3],"Name","pool2_5","Stride",[2 2])]

lgraph = addLayers(lgraph,tempLayers)

tempLayers = [

additionLayer(2,"Name","addition")

fullyConnectedLayer(4096,"Name","fc6","BiasLearnRateFactor",2)

reluLayer("Name","relu6")

dropoutLayer(0.5,"Name","drop6")

fullyConnectedLayer(4096,"Name","fc7","BiasLearnRateFactor",2)

reluLayer("Name","relu7")

dropoutLayer(0.5,"Name","drop7")

fullyConnectedLayer(3,"Name","fc8","BiasLearnRateFactor",2)

softmaxLayer("Name","prob")

classificationLayer("Name","classoutput")]

lgraph = addLayers(lgraph,tempLayers)

% 清理辅助变量

clear tempLayers

lgraph = connectLayers(lgraph,"pool1_5","addition/in1")

lgraph = connectLayers(lgraph,"pool2_5","addition/in2")

figure

plot(lgraph)

layers = lgraph.Layers

复制

画出来的图如下

输入图片读取处理的代码如下

%% 训练数据存储;

allImages1 = imageDatastore("E:\Data\old-new\CWT\1\",...

'IncludeSubfolders',true,...

'LabelSource','foldernames')

allImages2= imageDatastore("E:\Data\old-new\CWT\2\",...

'IncludeSubfolders',true,...

'LabelSource','foldernames')

%% 数据处理;

rng default

[imgsTrain1,imgsValidation1] = splitEachLabel(allImages1,0.8,'randomized')%按比例拆分 ImageDatastore 标签

disp(['Number of training images: ',num2str(numel(imgsTrain1.Files))])

disp(['Number of validation images: ',num2str(numel(imgsValidation1.Files))])

[imgsTrain2,imgsValidation2] = splitEachLabel(allImages2,0.8,'randomized')%按比例拆分 ImageDatastore 标签

disp(['Number of training images: ',num2str(numel(imgsTrain2.Files))])

disp(['Number of validation images: ',num2str(numel(imgsValidation2.Files))])

%% 处理输入的图片;

inputSize = layers(1).InputSize

augimgsTrain1 = augmentedImageDatastore(inputSize(1:2),imgsTrain1)% 调整图像大小以匹配网络输入层

augimgsValidation1 = augmentedImageDatastore(inputSize(1:2),imgsValidation1)

augimgsTrain2 = augmentedImageDatastore(inputSize(1:2),imgsTrain2)% 调整图像大小以匹配网络输入层

augimgsValidation2 = augmentedImageDatastore(inputSize(1:2),imgsValidation2)

augimgsTrain = combine(augimgsTrain1,augimgsTrain2)

% augimgsValidation = combine(augimgsValidation1,augimgsValidation2)

复制

但是训练时会一直报错,ValidationData设置为空因为我不知道怎么把augimgsValidation1 augimgsValidation2两个结构体的验证集放到一块,‘opts =’ 这行会报错误,所以上面也就注掉了

训练的代码如下

%% 设置参数进行训练

rng default

mbSize = 40

mxEpochs = 40

ilr = 1e-4

plt = 'training-progress'

opts = trainingOptions('sgdm',...

'InitialLearnRate',ilr, ...

'MaxEpochs',mxEpochs ,...

'MiniBatchSize',mbSize, ...

'ValidationData',[],...

'ExecutionEnvironment','multi-gpu',...

'Plots',plt)

[trainedAN,info2] = trainNetwork(augimgsTrain,layers,opts)

复制

报的错误如下图

有没有会用matlab做深度学习的大佬,帮我看看这个,万分感谢!

深度学习

matlab

神经网络

机器学习

迁移学习

一分钟了解直流变频空调

精选推荐

广告

mcca特征融合matlab代码

78下载·0评论

2019年1月26日

【火灾检测】基于matlab连通区域+SVM特征融合火灾检测【含Matlab源码 1223期】

1498阅读·3评论·7点赞

2021年8月17日

总结与归纳:深度神经网络中的数据融合方法

8124阅读·4评论·51点赞

2020年4月9日

基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

1.2W阅读·6评论·4点赞

2019年4月27日

分类预测 | MATLAB实现CNN卷积神经网络多特征分类预测

1313阅读·0评论·1点赞

2022年9月7日

MATLAB中深度学习的多级神经网络构建

1349阅读·0评论·1点赞

2021年12月17日

灭菌器供应厂家

精选推荐

广告

(Note)神经网络中的特征融合方式(add/concate)

1733阅读·0评论·1点赞

2022年7月19日

在 Matlab 中连接不同大小的数组:此函数允许您连接不同大小的数组,并在需要时使用 NaN 填充。-matlab开发

22下载·0评论

2021年6月1日

【MATLAB强化学习工具箱】学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent

3883阅读·8评论·4点赞

2021年11月15日

python将大量图片拼接千面图_11. 图像合成与图像融合

426阅读·0评论·1点赞

2020年12月10日

图像融合方法

3098阅读·1评论·3点赞

2020年11月11日

MATLAB的图像融合设计

1004阅读·1评论·1点赞

2021年8月30日

matlab图像融合sift,基于SIFT特征的图像拼接融合(matlab+vlfeat实现)

403阅读·0评论·0点赞

2021年4月24日

【matlab】机器学习与人工智能期末课设,基于融合特征的以图搜图应用

209阅读·0评论·1点赞

2022年6月1日

回归预测 | MATLAB实现CNN-GRU(卷积门控循环单元)多输入单输出

2884阅读·1评论·0点赞

2022年4月13日

Matlab之深度学习工作流程

1521阅读·0评论·3点赞

2020年9月29日

Matlab实现CCA多模特征融合

2752阅读·8评论·3点赞

2020年12月30日

Matlab深度学习上手初探

3976阅读·0评论·1点赞

2022年4月10日

(多模态 / 多维度)特征融合

1.4W阅读·0评论·16点赞

2020年12月2日

去首页

看看更多热门内容

评论4

m0_62482485

兄嘚,这个问题解决了么?

2022.10.24

m0_62482485

兄嘚,这个问题解决了么?

2022.10.24

程序猿_悟空

呵呵

图片搜索的原理有三个步骤

1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,hash function(散列函数)等。也可以根据不同的图像,设计不同的算法,比如图像局部N阶矩的方法提取图像特征。

2. 将图像特征信息进行编码,并将海量图像编码做查找表。对于目标图像,可以对分辨率较大的图像进行降采样,减少运算量后在进行图像特征提取和编码处理。

3. 相似度匹配运算:利用目标图像的编码值,在图像搜索引擎中的图像数据库进行全局或是局部的相似度计算;根据所需要的鲁棒性,设定阈值,然后将相似度高的图片预保留下来;最后应该还有一步筛选最佳匹配图片,这个应该还是用到特征检测算法。

其中每个步骤都有很多算法研究,围绕数学,统计学,图像编码,信号处理等理论进行研究。

根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。

这里的关键技术叫做"感知哈希算法"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。下面是一个最简单的实现:

第一步,缩小尺寸。

将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算"汉明距离"(Hammingdistance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

setp1

安装CodeX,不解释,在AppStop中搜索安装即可

setp2

安装Homebrew

Homebrew即MacOSX上的apt-get

按照官网的安装方式,在terminal中输入下列命令即可完成安装

cd ~

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

setp3

使用Homebrew安装Python,注意:避免使用系统Python解释器作为我们自己的主解析器,尤其是在使用virtualenv和virtualenvwrapper的时候。安装命令:

$ brew install python

注意安装结束后会有下列提示,提示我们把/usr/local/opt/python/libexec/bin增加到环境变量中,此举正是为了我们在使用python时,使用的是用Homebrew安装的python而不是系统python。

If you wish to have this formula's python executable in your PATH then add

the following to ~/.bash_profile:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

这是重要的一步,请不要跳过。

setp4

安装 virtualenv 和 virtualenvwrapper

这两个工具是为了创建独立的python环境,不了解的朋友请自行Google

值得注意的是,这两个工具对于搭建opencv3.0+python2.7运行环境来说不是必须的,但是强烈建议安装,以保证python环境的干净,易于管理。

安装只需执行命令:

$ pip install virtualenv virtualenvwrapper

安装完成后,在~/.bash_profile文件中追加如下内容:

# Virtualenv/VirtualenvWrapper

source /usr/local/bin/virtualenvwrapper.sh

然后执行命令:

$ source ~/.bash_profile

至此,virtualenv 和virtualenvwrapper已经正确完成安装。我们可以使用如下命令创建一个独立的python环境:

$ mkvirtualenv cv

setp5

我们开始安装一些必须的python包,安装NumPy

We need to install NumPy since the OpenCV Python bindings represent images as multi-dimensional NumPy arrays

安装方式:

$ pip install numpy

注意:如果你使用了step4中的virtualenv创建python虚拟环境,则需要在您之前创建的虚拟环境中安装需要的python包

step6

之前的步骤,主要目的是建立和配置编译安装OpenCv的环境,从这一步开始,我们开始真正的工作。

首先,我们使用brew安装需要的开发者工具,例如CMake。

$ brew install cmake pkg-config

还有一些必要的图像I/O包,这些包可以使我们能够加载各种不同类型的图像文件例如JPEG,PNG,TIFF等。

$ brew install jpeg libpng libtiff openexr

And finally, let’s install libraries that are used to optimize various operations within OpenCV (if we so choose):

$ brew install eigen tbb

setp7

恭喜,截止目前系统已经搭建完成,我们开始着手编译和安装python支持的opencv。下载代码:

$ cd ~

$ git clone https://github.com/Itseez/opencv.git

$ cd opencv

$ git checkout 3.0.0

最后一个命令$ git checkout 3.0.0其中的3.0.0可以替换成你需要的版本号

之后下载opencv_contrib代码,这部分不是必须的,但是强烈建议同时下载,原因是opencv_contrib包含很多有用的功能,包括:

feature detection, local invariant descriptors (SIFT, SURF, etc.), text detection in natural images, line descriptors, and more

$ cd ~

$ git clone https://github.com/Itseez/opencv_contrib

$ cd opencv_contrib

$ git checkout 3.0.0

请确保checkout opencv_contrib的版本号要与上面checkout opencv的版本号相同

step8

创建一个bulid目录:

$ cd ~/opencv

$ mkdir build

$ cd build

使用CMake配置我们的构建:

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \

-D PYTHON2_PACKAGES_PATH=~/.virtualenvs/cv/lib/python2.7/site-packages \

-D PYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/bin \

-D PYTHON2_INCLUDE_DIR=/usr/local/Frameworks/Python.framework/Headers \

-D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=ON \

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..

注意:在执行上述命令之前,请务必切换到之前建立的虚拟python环境cv:

workon cv

cmake命令执行完成后,需要关注它的总结输出,尤其是其中的Opencv modules部分:

-- OpenCV modules:

-- To be built: core flann imgproc ml objdetect photo video dnn imgcodecs shape videoio highgui superres ts features2d calib3d stitching videostab python2

-- Disabled:world

-- Disabled by dependency: -

-- Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python3 viz

-- Python 2:

-- Interpreter: /Users/zhuangyuan/.virtualenvs/cv/bin/python2.7 (ver 2.7.13)

-- Libraries: /usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/bin (ver 2.7.13)

-- numpy: /Users/zhuangyuan/.virtualenvs/cv/lib/python2.7/site-packages/numpy/core/include (ver 1.13.1)

-- packages path: /Users/zhuangyuan/.virtualenvs/cv/lib/python2.7/site-packages

如果python2部分的信息不完整,或者python2没有出现在OpenCV modules的To be built:后面,而是出现在Unvailable:后面,则说明Cmake没有正确完成,需要检查此步骤中Cmake命令的参数中的路径是否正确已经是否确实切换到了我们为opencv建立的虚拟python环境中。

再次提醒,此步骤中参数路径必须仔细核对,如果错误,后续的编译将无法成功

这时候可以开始编译了:

$ make -j4

这里的4是利用4核CPU全速并行编译,也可以不带-j4参数,或者把4修改成你的CPU核心数

编译完成后,进行安装:

make install

如果有错误,加上sudo再执行:

sudo make install

setp9

检查一下~/.virtualenvs/cv/lib/python2.7/site-packages/路径下可以看到cv2.so就说明安装成功了:

$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/

$ ls -l cv2.so

-rwxr-xr-x 1 adrian staff 2013052 Jun 5 15:20 cv2.so

用一下吧:

(cv) promote:lib zhuangyuan$ python

Python 2.7.13 (default, Jul 18 2017, 09:17:00)

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>import cv2

>>>cv2.__version__

'3.3.0'

恭喜,OSX系统下opencv3 with python2.7环境搭建成功。