|
@@ -0,0 +1,198 @@
|
|
|
|
+{
|
|
|
|
+ "cells": [
|
|
|
|
+ {
|
|
|
|
+ "cell_type": "heading",
|
|
|
|
+ "metadata": {
|
|
|
|
+ "collapsed": true
|
|
|
|
+ },
|
|
|
|
+ "level": 1,
|
|
|
|
+ "source": [
|
|
|
|
+ "## 数据下载\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('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
|
|
|
|
+}
|