网络优化网站建设学习随州网络推广
目录
摘要 1
类别描述 1
一般术语 1
关键词 1
- 导论 2
- 神经网络部分 2
2.1 公共框架 2
2.1.1 序贯模型(Sequential) 2
2.1.2 常用层(Core) 3
2.2 卷积神经网络框架(CNN) 3
2.2.1 卷积层(Convolutional) 3
2.3 循环神经网络框架(RNN) 3
2.3.1 循环层(Recurrent) 3
2.4 神经网络实现及实验 4
2.4.1 实验环境: 4
2.4.2 卷积神经网络实现 4
2.4.3 循环神经网络实现 4 - 图片检索部分 6
3.1 最近邻检索 6
3.1.1 概述 6
3.1.2 实现方法 6
3.2 GUI 及使用方法 7
3.2.1 实现方式 7
3.2.2 使用说明及效果图 7
10 个和它最相近的图片。 7
2.4神经网络实现及实验
2.4.1实验环境:
操作系统:CentOS Linux release 7.3.1611 (Core)
内存:128.0GB
中央处理器:Intel® Xeon® CPU E5-2630 v4@2.20GHz*10
图形处理器:NVIDIA GeForce GTX1080
2.4.2卷积神经网络实现
2.4.2.1设计架构
本实验中我们组使用了 CNN 神经网络进行图片分类。使用的模型是蓄罐模型由此建立神经网络,每一层神经网络里面加入卷积层 Conv2D(32, (3, 3)),加入激活层 Activation(‘relu’), 加入迟化层 MaxPooling2D(pool_size=(2, 2)),去除冗余数据
Dropout(0.2)。这是这是完整的一层神经网络。将神经网络输出传入到分类器中。首先将原来的神经网络数据降维后输入全连接层,最后使用激活层进行输出Activation(‘softmax’)。
2.4.2.2训练模型
在训练模型过程中,使用图片生成器 train_generator 给模型提供训练集提供输入。train_generator 会将训练集中的图片随机进行旋转切片等变化,使得模型见过足够多的图片。
验证集的图片与训练集图片不相同,并且每一次验证时也会将验证集合图片进行随机旋转切片等变换,本文转载自http://www.biyezuopin.vip/onews.asp?id=14882以防止模型因为验证集与训练集样本过小导致的过拟合。
2.4.3循环神经网络实现
在我们实现的对图片进行分类的RNN 有如下结构。
在 RNN 的实现中,由于 simpleRNN 层只接受一维的向量, 故在这里我们不再使用图片生成器,在这里我们使用 numpy 读取所有图片,接着用 numpy 的 reshape 将图片转化为一维,最后输入模型。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
import h5py
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
from get_data_of_train import get_test_from_dir
from get_data_of_train import get_testpic_from_dir
from get_data_of_train import get_singlepic_from_dir
from sklearn.neighbors import BallTree
import os
import numpymodel = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(256, 256, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))# the model so far outputs 3D feature maps (height, width, features)model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))# model.summary()model.load_weights('five_layers.h5')# get the image name list
ImageNameList = []
f = open("imagelist.txt", "r")
while True: line = f.readline()if line:ImageNameList.append(line)else:break
f.close()# get all the information from 5613 images
x_test = get_test_from_dir("image")
x_test = x_test.astype('float32')
x_test /= 255
print('x_test shape:', x_test.shape)
print(x_test.shape[0], 'train samples')
pre=model.predict_proba(x_test)# create ball tree
tree = BallTree(pre)# get the top10 images from one query
def Image_Retrive(filename):HitFile_List = []TestImageData,TestImageName = get_singlepic_from_dir("test",filename)# ImageData is the array of image ;ImageName is the array of the names of the picture in the ImageDataTestImageData = TestImageData.astype('float32')TestImageData /= 255query_matrix = model.predict_proba(TestImageData)distance, inden = tree.query( [query_matrix[0]], k = 11)for j in range(0,11):HitString = ImageNameList[ inden[0][j] ]target_filename = HitString[:-1]HitFile_List.append(target_filename)return(numpy.array(HitFile_List))class LoginDlg(QDialog):def __init__(self, parent=None):super(LoginDlg, self).__init__(parent)self.target_list = []self.setGeometry(1000,100,1000,1000)self.usr = QLabel(self)self.queryLabel = QLabel(self)self.usrLineEdit = QLineEdit(self)self.okBtn = QPushButton(self)self.cancelBtn = QPushButton(self)self.usr.setText("image")self.okBtn.setText("search")self.cancelBtn.setText("cancel")self.queryLabel.setText("query image")self.usr.setGeometry(10,10,100,20)self.usrLineEdit.setGeometry(120,10,200,20)self.okBtn.setGeometry(10,40,100,20)self.cancelBtn.setGeometry(120,40,100,20)self.queryLabel.setGeometry(120,70,100,20)self.okBtn.clicked.connect(self.find_image)self.cancelBtn.clicked.connect(self.reject)self.setWindowTitle("Image Retrival")#def accept(self):# if self.usrLineEdit.text().strip() == "eric" and self.pwdLineEdit.text() == "eric":# super(LoginDlg, self).accept()# else:# QMessageBox.warning(self,# "Warning",# "Wrong!",# QMessageBox.Yes)# self.usrLineEdit.setFocus()def find_image(self):file_name = self.usrLineEdit.text().strip()self.target_list = Image_Retrive(file_name)if len(self.target_list) == 11:query_label = QLabel(self)query_label.setGeometry(10,100,200,200)query_label.setScaledContents(True)image1 = QLabel(self)image1.setGeometry(0,500,200,200)image1.setScaledContents(True)image2 = QLabel(self)image2.setGeometry(200,500,200,200)image2.setScaledContents(True)image3 = QLabel(self)image3.setGeometry(400,500,200,200)image3.setScaledContents(True)image4 = QLabel(self)image4.setGeometry(600,500,200,200)image4.setScaledContents(True)image5 = QLabel(self)image5.setGeometry(800,500,200,200)image5.setScaledContents(True)image6 = QLabel(self)image6.setGeometry(0,700,200,200)image6.setScaledContents(True)image7 = QLabel(self)image7.setGeometry(200,700,200,200)image7.setScaledContents(True)image8 = QLabel(self)image8.setGeometry(400,700,200,200)image8.setScaledContents(True)image9 = QLabel(self)image9.setGeometry(600,700,200,200)image9.setScaledContents(True)image10 = QLabel(self)image10.setGeometry(800,700,200,200)image10.setScaledContents(True)pic_query = QImage( "image\\" + self.target_list[0])query_label.setPixmap(QPixmap.fromImage(pic_query))query_label.show()pic1 = QImage( "image\\" + self.target_list[1])image1.setPixmap(QPixmap.fromImage(pic1))image1.show()pic2 = QImage( "image\\" + self.target_list[2])image2.setPixmap(QPixmap.fromImage(pic2))image2.show() pic3 = QImage( "image\\" + self.target_list[3])image3.setPixmap(QPixmap.fromImage(pic3))image3.show() pic4 = QImage( "image\\" + self.target_list[4])image4.setPixmap(QPixmap.fromImage(pic4))image4.show() pic5 = QImage( "image\\" + self.target_list[5])image5.setPixmap(QPixmap.fromImage(pic5))image5.show() pic6 = QImage( "image\\" + self.target_list[6])image6.setPixmap(QPixmap.fromImage(pic6))image6.show() pic7 = QImage( "image\\" + self.target_list[7])image7.setPixmap(QPixmap.fromImage(pic7))image7.show() pic8 = QImage( "image\\" + self.target_list[8])image8.setPixmap(QPixmap.fromImage(pic8))image8.show()pic9 = QImage( "image\\" + self.target_list[9])image9.setPixmap(QPixmap.fromImage(pic9))image9.show()pic10 = QImage( "image\\" + self.target_list[10])image10.setPixmap(QPixmap.fromImage(pic10))image10.show()self.target_list = []else:QMessageBox.warning(self,"Warning","Wrong!",QMessageBox.Yes) app = QApplication(sys.argv)
dlg = LoginDlg()
dlg.show()
dlg.exec_()
app.exit()