1. 导入各种模块
基本形式为:
import 模块名
from 某个文件 import 某个模块
2. 导入数据(以两类分类问题为例,即numClass = 2)
训练集数据data
可以看到,data是一个四维的ndarray
训练集的标签
3. 将导入的数据转化我keras可以接受的数据格式
keras要求的label格式应该为binary class matrices,所以,需要对输入的label数据进行转化,利用keras提高的to_categorical函数
label = np_utils.to_categorical(label, numClass
此时的label变为了如下形式
(注:PyCharm无法显示那么多的数据,所以下面才只显示了1000个数据,实际上该例子所示的数据集有1223个数据)
4. 建立CNN模型
以下图所示的CNN网络为例
#生成一个model model = Sequential() #layer1-conv1 model.add(Convolution2D(16, 3, 3, border_mode='valid',input_shape=data.shape[-3:])) model.add(Activation('tanh'))#tanh # layer2-conv2 model.add(Convolution2D(32, 3, 3, border_mode='valid')) model.add(Activation('tanh'))#tanh # layer3-conv3 model.add(Convolution2D(32, 3, 3, border_mode='valid')) model.add(Activation('tanh'))#tanh # layer4 model.add(Flatten()) model.add(Dense(128, init='normal')) model.add(Activation('tanh'))#tanh # layer5-fully connect model.add(Dense(numClass, init='normal')) model.add(Activation('softmax')) # sgd = SGD(l2=0.1,lr=0.001, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd,class_mode="categorical")
5. 开始训练model
利用model.train_on_batch或者model.fit
补充知识:keras 多分类一些函数参数设置
用Lenet-5 识别Mnist数据集为例子:
采用下载好的Mnist数据压缩包转换成PNG图片数据集,加载图片采用keras图像预处理模块中的ImageDataGenerator。
首先import所需要的模块
from keras.preprocessing.image import ImageDataGenerator from keras.models import Model from keras.layers import MaxPooling2D,Input,Convolution2D from keras.layers import Dropout, Flatten, Dense from keras import backend as K
定义图像数据信息及训练参数
img_width, img_height = 28, 28 train_data_dir = 'dataMnist/train' #train data directory validation_data_dir = 'dataMnist/validation'# validation data directory nb_train_samples = 60000 nb_validation_samples = 10000 epochs = 50 batch_size = 32
判断使用的后台
if K.image_dim_ordering() == 'th': input_shape = (3, img_width, img_height) else: input_shape = (img_width, img_height, 3)
网络模型定义
主要注意最后的输出层定义
比如Mnist数据集是要对0~9这10种手写字符进行分类,那么网络的输出层就应该输出一个10维的向量,10维向量的每一维代表该类别的预测概率,所以此处输出层的定义为:
x = Dense(10,activation='softmax')(x)
此处因为是多分类问题,Dense()的第一个参数代表输出层节点数,要输出10类则此项值为10,激活函数采用softmax,如果是二分类问题第一个参数可以是1,激活函数可选sigmoid
img_input=Input(shape=input_shape) x=Convolution2D(32, 3, 3, activation='relu', border_mode='same')(img_input) x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x) x=Convolution2D(32,3,3,activation='relu',border_mode='same')(x) x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x) x=Convolution2D(64,3,3,activation='relu',border_mode='same')(x) x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x) x = Flatten(name='flatten')(x) x = Dense(64, activation='relu')(x) x= Dropout(0.5)(x) x = Dense(10,activation='softmax')(x) model=Model(img_input,x) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.summary()
利用ImageDataGenerator传入图像数据集
注意用ImageDataGenerator的方法.flow_from_directory()加载图片数据流时,参数class_mode要设为‘categorical',如果是二分类问题该值可设为‘binary',另外要设置classes参数为10种类别数字所在文件夹的名字,以列表的形式传入。
train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) # this is the augmentation configuration we will use for testing: # only rescaling test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='categorical', #多分类问题设为'categorical' classes=['0','1','2','3','4','5','6','7','8','9'] #十种数字图片所在文件夹的名字 ) validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='categorical' )
训练和保存模型及权值
model.fit_generator( train_generator, samples_per_epoch=nb_train_samples, nb_epoch=epochs, validation_data=validation_generator, nb_val_samples=nb_validation_samples ) model.save_weights('Mnist123weight.h5') model.save('Mnist123model.h5')
至此训练结束
图片预测
注意model.save()可以将模型以及权值一起保存,而model.save_weights()只保存了网络权值,此时如果要进行预测,必须定义有和训练出该权值所用的网络结构一模一样的一个网络。
此处利用keras.models中的load_model方法加载model.save()所保存的模型,以恢复网络结构和参数。
from keras.models import load_model from keras.preprocessing.image import img_to_array, load_img import numpy as np classes=['0','1','2','3','4','5','6','7','8','9'] model=load_model('Mnist123model.h5') while True: img_addr=input('Please input your image address:') if img_addr=="exit": break else: img = load_img(img_addr, False, target_size=(28, 28)) x = img_to_array(img) / 255.0 x = np.expand_dims(x, axis=0) result = model.predict(x) ind=np.argmax(result,1) print('this is a ', classes[ind])
以上这篇使用Keras构造简单的CNN网络实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
我正在建立一个简单的神经网络。数据是一个231长的向量,它是一个热编码的向量。每个231个长向量被分配一个8个长的热编码标签。 到目前为止,我的代码是: 问题是输出层是8个单位,但是我的标签不是单个单位,它们是一个热编码的8个长矢量。如何将此表示为输出? 错误消息是: 无法用非浮点dtype构建密集层 完全回溯:
首先我们来看看CNN的基本结构。一个常见的CNN例子如下图: 图中是一个图形识别的CNN模型。可以看出最左边的船的图像就是我们的输入层,计算机理解为输入若干个矩阵,这点和DNN基本相同。 接着是卷积层(Convolution Layer),这个是CNN特有的,我们后面专门来讲。卷积层的激活函数使用的是ReLU。我们在DNN中介绍过ReLU的激活函数,它其实很简单,就是$$ReLU(x) = max
本文向大家介绍TensorFlow实现卷积神经网络CNN,包括了TensorFlow实现卷积神经网络CNN的使用技巧和注意事项,需要的朋友参考一下 一、卷积神经网络CNN简介 卷积神经网络(ConvolutionalNeuralNetwork,CNN)最初是为解决图像识别等问题设计的,CNN现在的应用已经不限于图像和视频,也可用于时间序列信号,比如音频信号和文本数据等。CNN作为一个深度学习架构被
本文向大家介绍Numpy实现卷积神经网络(CNN)的示例,包括了Numpy实现卷积神经网络(CNN)的示例的使用技巧和注意事项,需要的朋友参考一下 以上就是Numpy实现卷积神经网络(CNN)的示例的详细内容,更多关于Numpy实现卷积神经网络的资料请关注呐喊教程其它相关文章!
我有以下简单的数据集。它由9个特征组成,是一个二元分类问题。特征向量的示例如下所示。每行都有相应的0,1标签。 我知道CNN被广泛用于图像分类,但我正试图将其应用于我手头的数据集。我正在尝试应用5个大小为2的过滤器。鉴于这些数据的形状,我一直致力于以正确的方式构建网络。这是我构建网络的功能。 最后,我还将调用一个测试函数来测试我创建的模型的准确性。下面的函数试图实现这一点 当我建立模型并通过训练函
问题内容: 我需要发送网络订单(我要使用Java编写的游戏服务器的简称)。我读到有关网络订单的信息,但找不到有关在数据发送之前发送的空头的任何详细信息。有人可以向我解释它是什么,以及如何使用Java将其发送给客户端吗? 问题答案: Java NIO字节缓冲区支持更改字节顺序。因此,网络字节顺序为Big Endian。 字节顺序是存储大于单个字节的数值的字节的顺序。有2种口味:Big Endian(