我就废话不多说了,大家还是直接看代码吧!
import keras import numpy as np from keras.applications import vgg16, inception_v3, resnet50, mobilenet #Load the VGG model vgg_model = vgg16.VGG16(weights='imagenet') #Load the Inception_V3 model inception_model = inception_v3.InceptionV3(weights='imagenet') #Load the ResNet50 model resnet_model = resnet50.ResNet50(weights='imagenet') #Load the MobileNet model mobilenet_model = mobilenet.MobileNet(weights='imagenet')
在以上代码中,我们首先import各种模型对应的module,然后load模型,并用ImageNet的参数初始化模型的参数。
如果不想使用ImageNet上预训练到的权重初始话模型,可以将各语句的中'imagenet'替换为'None'。
补充知识:keras上使用alexnet模型来高准确度对mnist数据进行分类
纲要
本文有两个特点:一是直接对本地mnist数据进行读取(假设事先已经下载或从别处拷来)二是基于keras框架(网上多是基于tf)使用alexnet对mnist数据进行分类,并获得较高准确度(约为98%)
本地数据读取和分析
很多代码都是一开始简单调用一行代码来从网站上下载mnist数据,虽然只有10来MB,但是现在下载速度非常慢,而且经常中途出错,要费很大的劲才能拿到数据。
(X_train, y_train), (X_test, y_test) = mnist.load_data()
其实可以单独来获得这些数据(一共4个gz包,如下所示),然后调用别的接口来分析它们。
mnist = input_data.read_data_sets("./MNIST_data", one_hot = True) #导入已经下载好的数据集,"./MNIST_data"为存放mnist数据的目录
x_train = mnist.train.images y_train = mnist.train.labels x_test = mnist.test.images y_test = mnist.test.labels
这里面要注意的是,两种接口拿到的数据形式是不一样的。 从网上直接下载下来的数据 其image data值的范围是0~255,且label值为0,1,2,3...9。 而第二种接口获取的数据 image值已经除以255(归一化)变成0~1范围,且label值已经是one-hot形式(one_hot=True时),比如label值2的one-hot code为(0 0 1 0 0 0 0 0 0 0)
所以,以第一种方式获取的数据需要做一些预处理(归一和one-hot)才能输入网络模型进行训练 而第二种接口拿到的数据则可以直接进行训练。
Alexnet模型的微调
按照公开的模型框架,Alexnet只有第1、2个卷积层才跟着BatchNormalization,后面三个CNN都没有(如有说错,请指正)。如果按照这个来搭建网络模型,很容易导致梯度消失,现象就是 accuracy值一直处在很低的值。 如下所示。
在每个卷积层后面都加上BN后,准确度才迭代提高。如下所示
完整代码
import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation, Flatten from keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2D from keras.layers.normalization import BatchNormalization from keras.callbacks import ModelCheckpoint import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #tensorflow已经包含了mnist案例的数据 batch_size = 64 num_classes = 10 epochs = 10 img_shape = (28,28,1) # input dimensions img_rows, img_cols = 28,28 # dataset input #(x_train, y_train), (x_test, y_test) = mnist.load_data() mnist = input_data.read_data_sets("./MNIST_data", one_hot = True) #导入已经下载好的数据集,"./MNIST_data"为存放mnist数据的目录 print(mnist.train.images.shape, mnist.train.labels.shape) print(mnist.test.images.shape, mnist.test.labels.shape) print(mnist.validation.images.shape, mnist.validation.labels.shape) x_train = mnist.train.images y_train = mnist.train.labels x_test = mnist.test.images y_test = mnist.test.labels # data initialization x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) input_shape = (img_rows, img_cols, 1) # Define the input layer inputs = keras.Input(shape = [img_rows, img_cols, 1]) #Define the converlutional layer 1 conv1 = keras.layers.Conv2D(filters= 64, kernel_size= [11, 11], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(inputs) # Define the pooling layer 1 pooling1 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv1) # Define the standardization layer 1 stand1 = keras.layers.BatchNormalization(axis= 1)(pooling1) # Define the converlutional layer 2 conv2 = keras.layers.Conv2D(filters= 192, kernel_size= [5, 5], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand1) # Defien the pooling layer 2 pooling2 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv2) # Define the standardization layer 2 stand2 = keras.layers.BatchNormalization(axis= 1)(pooling2) # Define the converlutional layer 3 conv3 = keras.layers.Conv2D(filters= 384, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand2) stand3 = keras.layers.BatchNormalization(axis=1)(conv3) # Define the converlutional layer 4 conv4 = keras.layers.Conv2D(filters= 384, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand3) stand4 = keras.layers.BatchNormalization(axis=1)(conv4) # Define the converlutional layer 5 conv5 = keras.layers.Conv2D(filters= 256, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand4) pooling5 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv5) stand5 = keras.layers.BatchNormalization(axis=1)(pooling5) # Define the fully connected layer flatten = keras.layers.Flatten()(stand5) fc1 = keras.layers.Dense(4096, activation= keras.activations.relu, use_bias= True)(flatten) drop1 = keras.layers.Dropout(0.5)(fc1) fc2 = keras.layers.Dense(4096, activation= keras.activations.relu, use_bias= True)(drop1) drop2 = keras.layers.Dropout(0.5)(fc2) fc3 = keras.layers.Dense(10, activation= keras.activations.softmax, use_bias= True)(drop2) # 基于Model方法构建模型 model = keras.Model(inputs= inputs, outputs = fc3) # 编译模型 model.compile(optimizer= tf.train.AdamOptimizer(0.001), loss= keras.losses.categorical_crossentropy, metrics= ['accuracy']) # 训练配置,仅供参考 model.fit(x_train, y_train, batch_size= batch_size, epochs= epochs, validation_data=(x_test,y_test))
以上这篇Keras使用ImageNet上预训练的模型方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
文章信息 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题 本文代码已上传到Github 本文地址:http://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html 本文作者:Francois Chollet 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间
错误为: 谁能帮帮我吗?
本文向大家介绍使用Keras预训练模型ResNet50进行图像分类方式,包括了使用Keras预训练模型ResNet50进行图像分类方式的使用技巧和注意事项,需要的朋友参考一下 Keras提供了一些用ImageNet训练过的模型:Xception,VGG16,VGG19,ResNet50,InceptionV3。在使用这些模型的时候,有一个参数include_top表示是否包含模型顶部的全连接层,如
我正在尝试使用 VGG16 编码器构建 U-Net 模型。这是模型代码。 我收到以下错误。 ValueError:图断开连接:无法获取张量张量的值("input_1: 0",形状=(无,512,512,3),dtype=float32)在层"input_1"。 注意:是VGG16型号的输入层
问题内容: 我想知道是否有可能保存经过部分训练的Keras模型并在再次加载模型后继续进行训练。 这样做的原因是,将来我将拥有更多的训练数据,并且我不想再次对整个模型进行训练。 我正在使用的功能是: 编辑1:添加了完全正常的示例 对于10个纪元后的第一个数据集,最后一个纪元的损失将为0.0748,精度为0.9863。 保存,删除和重新加载模型后,第二个数据集上训练的模型的损失和准确性分别为0.171
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:174:不推荐使用名称tf.get_default_session。请改用tf.compat.v1.get_default_session。 /usr/local/lib/python3.6/dist-packages/keras/backend/t