148 lines
5.3 KiB
Plaintext
148 lines
5.3 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# 基础知识\n",
|
||
"基本的CNN结构如下: Convolution(卷积) -> Pooling(池化) -> Convolution -> Pooling -> Fully Connected Layer(全连接层) -> Output\n",
|
||
"\n",
|
||
"Convolution(卷积)是获取原始数据并从中创建特征映射的行为。Pooling(池化)是下采样,通常以“max-pooling”的形式,我们选择一个区域,然后在该区域中取最大值,这将成为整个区域的新值。Fully Connected Layers(全连接层)是典型的神经网络,其中所有节点都“完全连接”。卷积层不像传统的神经网络那样完全连接。\n",
|
||
"\n",
|
||
"卷积:我们将采用某个窗口,并在该窗口中查找要素,该窗口的功能现在只是新功能图中的一个像素大小的功能,但实际上我们将有多层功能图。接下来,我们将该窗口滑过并继续该过程,继续此过程,直到覆盖整个图像。\n",
|
||
"\n",
|
||
"池化:最常见的池化形式是“最大池化”,其中我们简单地获取窗口中的最大值,并且该值成为该区域的新值。\n",
|
||
"\n",
|
||
"全连接层:每个卷积和池化步骤都是隐藏层。在此之后,我们有一个完全连接的层,然后是输出层。完全连接的层是典型的神经网络(多层感知器)类型的层,与输出层相同。\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 注意\n",
|
||
"本次代码中所需的X.pickle和y.pickle为上一篇的输出,路径请根据自己的情况更改!\n",
|
||
"\n",
|
||
"此篇中文为译者根据原文整理得到,可能有不当之处,可以<a href = \"https://pythonprogramming.net/convolutional-neural-network-deep-learning-python-tensorflow-keras/\">点击此处查看原文</a>。"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Using TensorFlow backend.\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Train on 17462 samples, validate on 7484 samples\n",
|
||
"Epoch 1/3\n",
|
||
"17462/17462 [==============================] - 47s 3ms/step - loss: 0.6728 - acc: 0.6019 - val_loss: 0.6317 - val_acc: 0.6463\n",
|
||
"Epoch 2/3\n",
|
||
"17462/17462 [==============================] - 41s 2ms/step - loss: 0.6164 - acc: 0.6673 - val_loss: 0.6117 - val_acc: 0.6776\n",
|
||
"Epoch 3/3\n",
|
||
"17462/17462 [==============================] - 41s 2ms/step - loss: 0.5690 - acc: 0.7129 - val_loss: 0.5860 - val_acc: 0.6963\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"<keras.callbacks.History at 0x7f40a8322d68>"
|
||
]
|
||
},
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import tensorflow as tf\n",
|
||
"from tensorflow.keras.datasets import cifar10\n",
|
||
"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n",
|
||
"from tensorflow.keras.models import Sequential\n",
|
||
"from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten\n",
|
||
"from tensorflow.keras.layers import Conv2D, MaxPooling2D\n",
|
||
"\n",
|
||
"import pickle\n",
|
||
"\n",
|
||
"pickle_in = open(\"../datasets/X.pickle\",\"rb\")\n",
|
||
"X = pickle.load(pickle_in)\n",
|
||
"\n",
|
||
"pickle_in = open(\"../datasets/y.pickle\",\"rb\")\n",
|
||
"y = pickle.load(pickle_in)\n",
|
||
"\n",
|
||
"X = X/255.0\n",
|
||
"\n",
|
||
"model = Sequential()\n",
|
||
"\n",
|
||
"model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:]))\n",
|
||
"model.add(Activation('relu'))\n",
|
||
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
|
||
"\n",
|
||
"model.add(Conv2D(256, (3, 3)))\n",
|
||
"model.add(Activation('relu'))\n",
|
||
"model.add(MaxPooling2D(pool_size=(2, 2)))\n",
|
||
"\n",
|
||
"model.add(Flatten()) # this converts our 3D feature maps to 1D feature vectors\n",
|
||
"\n",
|
||
"model.add(Dense(64))\n",
|
||
"\n",
|
||
"model.add(Dense(1))\n",
|
||
"model.add(Activation('sigmoid'))\n",
|
||
"\n",
|
||
"model.compile(loss='binary_crossentropy',\n",
|
||
" optimizer='adam',\n",
|
||
" metrics=['accuracy'])\n",
|
||
"\n",
|
||
"model.fit(X, y, batch_size=32, epochs=3, validation_split=0.3)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"在仅仅三个epoches之后,我们的验证准确率为71%。如果我们继续进行更多的epoches,我们可能会做得更好,但我们应该讨论我们如何知道我们如何做。为了解决这个问题,我们可以使用TensorFlow附带的TensorBoard,它可以帮助您在训练模型时可视化模型。\n",
|
||
"\n",
|
||
"我们将在下一个教程中讨论TensorBoard以及对我们模型的各种调整!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.6.2"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|