keras-VGG16模型

本文介绍如何使用Keras构建并应用VGG16深度学习模型进行图像分类,详细展示了从加载图像到预处理,再到模型训练及预测的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值