用keras框架较为方便
创新互联建站长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为龙子湖企业提供专业的网站建设、网站制作,龙子湖网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
首先安装anaconda,然后通过pip安装keras
1、#导入各种用到的模块组件
from __future__ import absolute_import
from __future__ import print_function
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.advanced_activations import PReLU
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.optimizers import SGD, Adadelta, Adagrad
from keras.utils import np_utils, generic_utils
from six.moves import range
from data import load_data
import random
import numpy as np
np.random.seed(1024) # for reproducibility
2、。#打乱数据
index = [i for i in range(len(data))]
random.shuffle(index)
data = data[index]
label = label[index]
print(data.shape[0], ' samples')
#label为0~9共10个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数
label = np_utils.to_categorical(label, 10)
###############
#开始建立CNN模型
###############
#生成一个model
model = Sequential()
3、#第一个卷积层,4个卷积核,每个卷积核大小5*5。1表示输入的图片的通道,灰度图为1通道。
#border_mode可以是valid或者full,具体看这里说明:
#激活函数用tanh
#你还可以在model.add(Activation('tanh'))后加上dropout的技巧: model.add(Dropout(0.5))
model.add(Convolution2D(4, 5, 5, border_mode='valid',input_shape=(1,28,28)))
model.add(Activation('tanh'))
#第二个卷积层,8个卷积核,每个卷积核大小3*3。4表示输入的特征图个数,等于上一层的卷积核个数
4、全连接层,先将前一层输出的二维特征图flatten为一维的。
#Dense就是隐藏层。16就是上一层输出的特征图个数。4是根据每个卷积层计算出来的:(28-5+1)得到24,(24-3+1)/2得到11,(11-3+1)/2得到4
#全连接有128个神经元节点,初始化方式为normal
model.add(Flatten())
model.add(Dense(128, init='normal'))
model.add(Activation('tanh'))
#Softmax分类,输出是10类别
model.add(Dense(10, init='normal'))
model.add(Activation('softmax'))
#############
#开始训练模型
##############
#使用SGD + momentum
#model.compile里的参数loss就是损失函数(目标函数)
sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=["accuracy"])
#调用fit方法,就是一个训练过程. 训练的epoch数设为10,batch_size为100.
#数据经过随机打乱shuffle=True。verbose=1,训练过程中输出的信息,0、1、2三种方式都可以,无关紧要。show_accuracy=True,训练时每一个epoch都输出accuracy。
#validation_split=0.2,将20%的数据作为验证集。
model.fit(data, label, batch_size=100, nb_epoch=10,shuffle=True,verbose=1,validation_split=0.2)
"""
#使用data augmentation的方法
#一些参数和调用的方法,请看文档
datagen = ImageDataGenerator(
featurewise_center=True, # set input mean to 0 over the dataset
samplewise_center=False, # set each sample mean to 0
featurewise_std_normalization=True, # divide inputs by std of the dataset
samplewise_std_normalization=False, # divide each input by its std
zca_whitening=False, # apply ZCA whitening
rotation_range=20, # randomly rotate images in the range (degrees, 0 to 180)
width_shift_range=0.2, # randomly shift images horizontally (fraction of total width)
height_shift_range=0.2, # randomly shift images vertically (fraction of total height)
horizontal_flip=True, # randomly flip images
vertical_flip=False) # randomly flip images
# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(data)
for e in range(nb_epoch):
print('-'*40)
print('Epoch', e)
print('-'*40)
print("Training...")
# batch train with realtime data augmentation
progbar = generic_utils.Progbar(data.shape[0])
for X_batch, Y_batch in datagen.flow(data, label):
loss,accuracy = model.train(X_batch, Y_batch,accuracy=True)
progbar.add(X_batch.shape[0], values=[("train loss", loss),("accuracy:", accuracy)] )
一. 首先说说自相关互相关概念 信号析概念别表示两间序列间同间序列任意两同刻取值间相关程度即互相关函数描述随机信号 x(t),y(t)任意两同刻t一t二取值间相关程度自相关函数描述随机信号x(t)任意两同刻t一t二取值间相关 程度 自相关函数描述随机信号X(t)任意两同刻t一t二取值间相关程度;互相关函数给频域内两信号否相关判断指标两测点间信号互谱与各自自谱联系起能用确定输信号程度自输入信号修测量接入噪声源产误差非效. 事实图象处理自相关互相关函数定义:设原函数f(t)则自相关函数定义R(u)=f(t)*f(-t)其*表示卷积;设两 函数别f(t)g(t)则互相关函数定义R(u)=f(t)*g(-t)反映两函数同相位置互相匹配程度 何matlab实现两相关并用图像显示呢 dt=.一; t=[0:dt:一00]; x=cos(t); [a,b]=xcorr(x,'unbiased'); plot(b*dt,a) 面代码求自相关函数并作图于互相关函数稍微修改即[a,b]=xcorr(x,'unbiased');改[a,b]=xcorr(x,y,'unbiased');便 二. 实现程: Matalb求解xcorr程事实利用Fourier变换卷积定理进行即R(u)=ifft(fft(f)×fft(g))其 ×表示乘注:公式仅表示形式计算并非实际计算所用公式直接采用卷积进行计算结与xcorr同事实两者既定 理保证结定相同没用公式已面检验两者结相同代码: dt=.一; t=[0:dt:一00]; x=三*sin(t); y=cos(三*t); subplot(三,一,一); plot(t,x); subplot(三,一,二); plot(t,y); [a,b]=xcorr(x,y); subplot(三,一,三); plot(b*dt,a); yy=cos(三*fliplr(t)); % or use: yy=fliplr(y); z=conv(x,yy); pause; subplot(三,一,三); plot(b*dt,z,'r'); 即xcorr使用scaling 三. 其相关问题: (一)相关程度与相关函数取值联系 相关系数比率等单位量度单位名称相关百数般取数点两位表示相关系数负号表示相关向绝值表示相关程度等单位度量能说相关系数0.漆0.三5两倍能说相关系数0.漆二列变量相关程度比相关系数0.三5二列变量相关程度更密切更高能说相关系数0.漆00.吧0与相关系数0.三00.四0增加程度 于相关系数所表示意义目前统计界尚致通认: 相关系数 相关程度 0.00-±0.三0 微相关 ±0.三0-±0.50 实相关 ±0.50-±0.吧0 显著相关 ±0.吧0-±一.00 高度相关 (二)matlab计算自相关函数autocorrxcorr 别用两函数同序列计算结太xcorr没均值减掉做相关autocorr则减掉均值且用离散信号做自相关信号截取度(采点N)自相关函数 (三)xcorr计算互相关函数带option参数: a=xcorr(x,y,'option') option=baised计算互相关函数偏估计; option=unbaised计算互相关函数偏估计; option=coeff计算归化互相关函数即互相关系数-一至一间; option=none缺省情况 所想要计算互相关系数用'coeff'参数 用xcorr函数作离散互相关运算要注意x, y等向量短向量自填0与齐运算结行向量列向量与x 互相关运算计算x,y两组随机数据相关程度使用参数coeff结互相关系数-一至一间否则结定范围能能视乎x, y数据所般要计算两组数据相关程度般选择coeff参数结进行归化 所谓归化简单理解数据系列缩放-一一范围式种简化计算式即量纲表达式经变换化量纲表达式纯量变换式X=(X实测--Xmin)/(Xmax-Xmin) 般说选择归化进行互相关运算结绝值越两组数据相关程度越
写了一个输入和卷积核dim=2是一样的(都是3)的卷积函数,可以试试多加一个for循环变成三维卷积
def conv3D(image, filter):
'''
三维卷积
:param image: 输入,shape为 [h,w,c], c=3
:param filter: 卷积核,shape为 [x,y,z], z=3
:return:
'''
h, w, c = image.shape
x, y, z = filter.shape
height_new = h - x + 1 # 输出 h
width_new = w - y + 1 # 输出 w
image_new = np.zeros((height_new, width_new), dtype=np.float)
for i in range(height_new):
for j in range(width_new):
r = np.sum(image[i:i+x, j:j+x, 0] * filter[:,:,0])
g = np.sum(image[i:i+y, j:j+y, 1] * filter[:,:,1])
b = np.sum(image[i:i+z, j:j+z, 2] * filter[:,:,2])
image_new[i, j] = np.sum([r,g,b])
image_new = image_new.clip(0, 255)
image_new = np.rint(image_new).astype('uint8')
return image_new
如果不能一次性写入,那就分块。
假设data_string 最大长度为MAX_LENGTH ,则只需要将你需要写入的二进制字符串分块,每块大小为MAX_LENGTH,然后循环写入,即可。
conv是卷积运算,同时也可以做多项式的乘法
C=conv2(A,B)
C=conv2(Hcol,Hrow,A)
C=conv2(,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(,'shape') 用来指定 conv2 返回二维卷积结果部分,参数 shape 可取值如下:
》full 为缺省值,返回二维卷积的全部结果;
》same 返回二维卷积结果中与 A 大小相同的中间部分;
valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。
应用举例:
A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
B = [1 2 1;0 2 0;3 1 3]
B =
1 2 1
0 2 0
3 1 3
C = conv2(A,B)
C =
17 58 66 34 32 38 15
23 85 88 35 67 76 16
55 149 117 163 159 135 67
79 78 160 161 187 129 51
23 82 153 199 205 108 75
30 68 135 168 91 84 9
33 65 126 85 104 15 27
可以自己 help conv
至于gggfconv和 ggfconv,matlab 不自带这两个函数,你看到的应该是别人自己写的,用户自定义。