{ "cells": [ { "cell_type": "heading", "metadata": { "collapsed": true }, "level": 1, "source": [ "# 数据下载\n", "\n", "对应的模型在 'vgg16' 可以下载链接: https://pan.baidu.com/s/1qgx5LfTOen9MDlTdfGKFhw 密码: s4m5" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 导入包\n", "from keras.models import Sequential\n", "from keras.layers.core import Flatten, Dense, Dropout\n", "from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D\n", "from keras.optimizers import SGD\n", "import cv2, numpy as np" ] }, { "cell_type": "heading", "metadata": {}, "level": 1, "source": [ "定义模型" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def VGG_16(weights_path=None):\n", " model = Sequential()\n", " model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))\n", " model.add(Convolution2D(64, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(64, 3, 3, activation='relu'))\n", " model.add(MaxPooling2D((2,2), strides=(2,2)))\n", " \n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(128, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(128, 3, 3, activation='relu'))\n", " model.add(MaxPooling2D((2,2), strides=(2,2)))\n", " \n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(256, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(256, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(256, 3, 3, activation='relu'))\n", " model.add(MaxPooling2D((2,2), strides=(2,2)))\n", " \n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(MaxPooling2D((2,2), strides=(2,2)))\n", " \n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(ZeroPadding2D((1,1)))\n", " model.add(Convolution2D(512, 3, 3, activation='relu'))\n", " model.add(MaxPooling2D((2,2), strides=(2,2)))\n", " \n", " model.add(Flatten())\n", " model.add(Dense(4096, activation='relu'))\n", " model.add(Dropout(0.5))\n", " model.add(Dense(4096, activation='relu'))\n", " model.add(Dropout(0.5))\n", " model.add(Dense(1000, activation='softmax'))\n", " \n", " if weights_path:\n", " model.load_weights(weights_path)\n", " \n", " return model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model = VGG_16('data/vgg16_weights.h5') " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)\n", "model.compile(optimizer=sgd, loss='categorical_crossentropy')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def load_image(imageurl):\n", " im = cv2.resize(cv2.imread(imageurl),(224,224)).astype(np.float32)\n", " im[:,:,0] -= 103.939\n", " im[:,:,1] -= 116.779\n", " im[:,:,2] -= 123.68\n", " im = im.transpose((2,0,1))\n", " im = np.expand_dims(im,axis=0)\n", " return im" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f = open('synset_words.txt','r')\n", "lines = f.readlines()\n", "f.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def predict(url):\n", " im = load_image(url)\n", " pre = np.argmax(model.predict(im))\n", " print(lines[pre])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%pylab inline\n", "from IPython.display import Image\n", "Image('cat1.jpg')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "predict('cat1.jpg')\n", "Image('zebra.jpg')\n", "predict('zebra.jpg')\n", "Image('airplane.jpg')\n", "predict('airplane.jpg')\n", "predict('airplane.jpg')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }