keras-VGG16模型

import time
from keras.applications.imagenet_utils import preprocess_input, decode_predictions
from keras.layers import Dropout, Flatten, Dense
from keras.layers.convolutional import Convolution2D,MaxPooling2D
from keras.models import Sequential
from keras.preprocessing import image
from keras import backend as K
K.set_image_data_format('channels_first')
import numpy as np


t0 = time.time()
height,width = 224,224
img_path = "cat.jpg"
img = img_to_array(img_path,target_size=(224,224))
x = img_to_array(img) #三维(3,224,224,
x = np.expand_dims(x,axis=0) #四维(1,3,224,224)
x = preprocess_input(x) #预处理


#将导入的图片变成224,224,然后将三维的图片变成四维的图片
print("开始建模")

def VGG16(height,width):
    print("开始建模CNN ...")
    model = Sequential()
    # Block 1, 2层
    model.add(Convolution2D(64, 3, 3, activation='relu',
                            border_mode='same', input_shape=(3, height, width)))
    model.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    # Block 2, 2层
    model.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    # Block 3, 3层
    model.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(256, 3, 3, activation='relu', border_mode='same'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    # Block 4, 3层
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    # Block 5, 3层
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(Convolution2D(512, 3, 3, activation='relu', border_mode='same'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2)))

    # Classification block, 全连接3层
    model.add(Flatten())
    model.add(Dense(2000, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(2000, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1000, activation='softmax'))
    return model


model = VGG16(height=height,width=width)
model.load_weights('vgg16_weights_th_dim_ordering_th_kernels.h5')
print("建模CNN完成 ...")

# 构建VGG-16模型,并且导入权重,记住,如果你是theano就导入theano的权重,否则就导入tensorflow的权重。

y_pred = model.predict(x)
print(img_path,decode_predictions(y_pred))
print(decode_predictions(y_pred)[0][0][1])

print('类预测:', decode_predictions(y_pred)[0][0][1])#概率最大类
print("耗时: %.2f seconds【徐海蛟博士】 ..." % (time.time() -t0))


你可能感兴趣的:(python,深度学习算法,keras,代码脚本)