Understand the number of input / output parameters of a convolutional neural network

Basically learning with keras and python

What i learned

  1. Understand the number of I / O parameters for a layer
  2. Understand data processing after convolution layer and pooling layer processing

Code used for learning

Code for mnist cnn in the keras documentation.

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

What was the question

The most questionable thing is the number of input / output dimensions. The result of model.summary is output below. There are two things I wondered here.

  1. "Mnist data is 28 * 28 image data, but where did the first layer 26, 26, 32 come from?"
  2. "What is Conv2D 32?"
Model: "sequential_2"


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_3 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 128)               1179776   
_________________________________________________________________
dropout_4 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_4 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0

What I found

32 of the Conv2D function indicates the number of filters. In other words, 32 types of filters are used to perform various edge extractions. Furthermore, by performing the filter calculation as stride 1, the image is made smaller by one size, and the image is reduced by 2 dots in each of the vertical and horizontal directions. Since there is an output for each filter, there are 32 outputs. Also, unlike the convolution layer, the pooling layer does not handle overlapping dots, so the number of outputs is greatly reduced. (As an aside, the number of inputs and outputs does not change because the dropout layer only sets the value to 0)

Check next

  1. The specific value of the filter. Visualization

Recommended Posts

Understand the number of input / output parameters of a convolutional neural network
Visualize the inner layer of a neural network
The story of making a music generation neural network
Implementation of a convolutional neural network using only Numpy
Implementation of a two-layer neural network 2
Touch the object of the neural network
Build a classifier with a handwriting recognition rate of 99.2% with a TensorFlow convolutional neural network
Find the number of days in a month
Output in the form of a python array
[NNabla] How to get the output (variable) of the middle layer of a pre-built network
[Python] A program that counts the number of valleys
A memorandum about the warning of the pylint output result
A memo to visually understand the axis of pandas.Panel
Implement Convolutional Neural Network
Basics of PyTorch (2) -How to make a neural network-
Output the output result of sklearn.metrics.classification_report as a CSV file
Understand the number of input / output parameters of a convolutional neural network
Implementation of a two-layer neural network 2
Visualize the inner layer of a neural network
With a bit of precision, the weight parameters were incredibly reduced ~ CNN's amazing results ~
How to easily draw the structure of a neural network on Google Colaboratory using "convnet-drawer"
I tried a convolutional neural network (CNN) with a tutorial on TensorFlow on Cloud9-Classification of handwritten images-
A network diagram was created with the data of COVID-19.
Construction of a neural network that reproduces XOR by Z3
CNN Acceleration Series ~ FCNN: Introduction of Fourier Convolutional Neural Network ~
Implement a 3-layer neural network
10. Counting the number of lines
Get the number of digits
Calculate the number of changes
4. Circle parameters with neural network!
Filter the output of tracemalloc
Let's summarize the basic functions of TensorFlow by creating a neural network that learns XOR gates
Read the standard output of a subprocess line by line in Python
Django: Fluctuate the number of child forms depending on the number of input items
How to output the output result of the Linux man command to a file
A command to easily check the speed of the network on the console
[python] A note that started to understand the behavior of matplotlib.pyplot
[NNabla] How to remove the middle tier of a pre-built network
Get the number of readers of a treatise on Mendeley in Python
Get the number of views of Qiita
Understand the contents of sklearn's pipeline
I implemented a two-layer neural network
Get the number of Youtube subscribers
The story of writing a program
[Python] A program that calculates the number of chocolate segments that meet the conditions
Get the number of searches with a regular expression. SeleniumBasic VBA Python
[Python] A program that calculates the number of socks to be paired
Generate a list packed with the number of days in the current month.
Check the in-memory bytes of a floating point number float in Python
I tried how to improve the accuracy of my own Neural Network
How to put a line number at the beginning of a CSV file
How to play a video while watching the number of frames (Mac)
I made an image discrimination (cifar10) model using a convolutional neural network.
The effect of changing the parameters of the multi-layer neural network (Keras) on the value of the loss function was evaluated (subject: MNIST classification)
The result was better when the training data of the mini-batch was made a hybrid of fixed and random with a neural network.
I tried to understand the learning function of neural networks carefully without using a machine learning library (first half).