Using more sophisticated images with Convolutional Neural Networks¶
I실생활의 이미지는 모양도 다르고, 비율도 다르고, 색깔도 다양하다. 이러한 것들을 분류하는 CNN을 만들어 본다.
- Cats and Dogs 이미지 이용
- 개와 고양이 분류하는 Neural Network 만들기
- Evaluate the Training and Validation accuracy
Explore the Example Data¶
/tmp
컬럼에, 2000개의 이미지를 다운로드 받아서 저장한다.
NOTE: 2,000 개의 이미지는 캐글에서 가져왔다. "Dogs vs. Cats" dataset 원래는 25,000 개의 이미지 이지만, 실습용으로 추렸음.
In [ ]:
In [2]:
!wget --no-check-certificate \
https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip \
-O /tmp/cats_and_dogs_filtered.zip
--2022-12-30 05:22:44-- https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip Resolving storage.googleapis.com (storage.googleapis.com)... 172.217.194.128, 74.125.200.128, 74.125.68.128, ... Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.194.128|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 68606236 (65M) [application/zip] Saving to: ‘/tmp/cats_and_dogs_filtered.zip’ /tmp/cats_and_dogs_ 100%[===================>] 65.43M 21.3MB/s in 3.9s 2022-12-30 05:22:48 (16.9 MB/s) - ‘/tmp/cats_and_dogs_filtered.zip’ saved [68606236/68606236]
압축 풀기¶
In [3]:
import zipfile
In [4]:
file = zipfile.ZipFile('/tmp/cats_and_dogs_filtered.zip')
In [5]:
file.extractall('/tmp')
In [ ]:
데이터 억세스할 경로를 만든다.¶
In [6]:
base_dir = '/tmp/cats_and_dogs_filtered'
In [7]:
train_dir = '/tmp/cats_and_dogs_filtered/train'
In [8]:
test_dir = '/tmp/cats_and_dogs_filtered/validation'
In [ ]:
파일명을 찍어본다.¶
In [ ]:
# 학습용 개 사진이 저장된 디렉토리 안에 있는 파일명을 확인
In [9]:
import os
In [11]:
os.listdir(train_dir+'/dogs')
Out[11]:
['dog.370.jpg', 'dog.387.jpg', 'dog.568.jpg', 'dog.694.jpg', 'dog.395.jpg', 'dog.436.jpg', 'dog.106.jpg', 'dog.560.jpg', 'dog.580.jpg', 'dog.438.jpg', 'dog.801.jpg', 'dog.469.jpg', 'dog.961.jpg', 'dog.525.jpg', 'dog.409.jpg', 'dog.292.jpg', 'dog.715.jpg', 'dog.495.jpg', 'dog.453.jpg', 'dog.80.jpg', 'dog.698.jpg', 'dog.796.jpg', 'dog.586.jpg', 'dog.52.jpg', 'dog.724.jpg', 'dog.269.jpg', 'dog.602.jpg', 'dog.550.jpg', 'dog.434.jpg', 'dog.723.jpg', 'dog.147.jpg', 'dog.413.jpg', 'dog.827.jpg', 'dog.522.jpg', 'dog.42.jpg', 'dog.420.jpg', 'dog.247.jpg', 'dog.833.jpg', 'dog.25.jpg', 'dog.270.jpg', 'dog.883.jpg', 'dog.280.jpg', 'dog.819.jpg', 'dog.745.jpg', 'dog.786.jpg', 'dog.686.jpg', 'dog.893.jpg', 'dog.863.jpg', 'dog.81.jpg', 'dog.151.jpg', 'dog.784.jpg', 'dog.824.jpg', 'dog.552.jpg', 'dog.18.jpg', 'dog.907.jpg', 'dog.481.jpg', 'dog.273.jpg', 'dog.514.jpg', 'dog.748.jpg', 'dog.492.jpg', 'dog.205.jpg', 'dog.296.jpg', 'dog.993.jpg', 'dog.13.jpg', 'dog.675.jpg', 'dog.235.jpg', 'dog.298.jpg', 'dog.230.jpg', 'dog.204.jpg', 'dog.895.jpg', 'dog.974.jpg', 'dog.344.jpg', 'dog.868.jpg', 'dog.349.jpg', 'dog.288.jpg', 'dog.428.jpg', 'dog.427.jpg', 'dog.847.jpg', 'dog.322.jpg', 'dog.339.jpg', 'dog.468.jpg', 'dog.19.jpg', 'dog.902.jpg', 'dog.783.jpg', 'dog.197.jpg', 'dog.76.jpg', 'dog.435.jpg', 'dog.478.jpg', 'dog.251.jpg', 'dog.926.jpg', 'dog.43.jpg', 'dog.402.jpg', 'dog.755.jpg', 'dog.778.jpg', 'dog.860.jpg', 'dog.561.jpg', 'dog.305.jpg', 'dog.954.jpg', 'dog.30.jpg', 'dog.990.jpg', 'dog.480.jpg', 'dog.211.jpg', 'dog.852.jpg', 'dog.536.jpg', 'dog.355.jpg', 'dog.905.jpg', 'dog.54.jpg', 'dog.123.jpg', 'dog.596.jpg', 'dog.138.jpg', 'dog.417.jpg', 'dog.670.jpg', 'dog.881.jpg', 'dog.194.jpg', 'dog.702.jpg', 'dog.948.jpg', 'dog.126.jpg', 'dog.631.jpg', 'dog.124.jpg', 'dog.410.jpg', 'dog.62.jpg', 'dog.962.jpg', 'dog.56.jpg', 'dog.941.jpg', 'dog.685.jpg', 'dog.118.jpg', 'dog.424.jpg', 'dog.513.jpg', 'dog.699.jpg', 'dog.218.jpg', 'dog.141.jpg', 'dog.107.jpg', 'dog.163.jpg', 'dog.384.jpg', 'dog.175.jpg', 'dog.818.jpg', 'dog.121.jpg', 'dog.553.jpg', 'dog.611.jpg', 'dog.750.jpg', 'dog.20.jpg', 'dog.714.jpg', 'dog.991.jpg', 'dog.779.jpg', 'dog.837.jpg', 'dog.976.jpg', 'dog.21.jpg', 'dog.655.jpg', 'dog.915.jpg', 'dog.304.jpg', 'dog.726.jpg', 'dog.295.jpg', 'dog.700.jpg', 'dog.134.jpg', 'dog.360.jpg', 'dog.354.jpg', 'dog.193.jpg', 'dog.63.jpg', 'dog.877.jpg', 'dog.172.jpg', 'dog.635.jpg', 'dog.493.jpg', 'dog.964.jpg', 'dog.947.jpg', 'dog.575.jpg', 'dog.956.jpg', 'dog.534.jpg', 'dog.10.jpg', 'dog.876.jpg', 'dog.866.jpg', 'dog.117.jpg', 'dog.591.jpg', 'dog.797.jpg', 'dog.512.jpg', 'dog.520.jpg', 'dog.757.jpg', 'dog.521.jpg', 'dog.484.jpg', 'dog.500.jpg', 'dog.148.jpg', 'dog.279.jpg', 'dog.583.jpg', 'dog.981.jpg', 'dog.639.jpg', 'dog.221.jpg', 'dog.316.jpg', 'dog.364.jpg', 'dog.530.jpg', 'dog.104.jpg', 'dog.888.jpg', 'dog.208.jpg', 'dog.129.jpg', 'dog.505.jpg', 'dog.776.jpg', 'dog.404.jpg', 'dog.830.jpg', 'dog.232.jpg', 'dog.246.jpg', 'dog.72.jpg', 'dog.207.jpg', 'dog.966.jpg', 'dog.287.jpg', 'dog.683.jpg', 'dog.758.jpg', 'dog.164.jpg', 'dog.988.jpg', 'dog.526.jpg', 'dog.538.jpg', 'dog.474.jpg', 'dog.111.jpg', 'dog.229.jpg', 'dog.83.jpg', 'dog.209.jpg', 'dog.658.jpg', 'dog.191.jpg', 'dog.814.jpg', 'dog.488.jpg', 'dog.746.jpg', 'dog.719.jpg', 'dog.497.jpg', 'dog.367.jpg', 'dog.673.jpg', 'dog.35.jpg', 'dog.242.jpg', 'dog.918.jpg', 'dog.447.jpg', 'dog.103.jpg', 'dog.277.jpg', 'dog.248.jpg', 'dog.75.jpg', 'dog.485.jpg', 'dog.414.jpg', 'dog.808.jpg', 'dog.850.jpg', 'dog.67.jpg', 'dog.749.jpg', 'dog.928.jpg', 'dog.571.jpg', 'dog.614.jpg', 'dog.671.jpg', 'dog.265.jpg', 'dog.253.jpg', 'dog.549.jpg', 'dog.609.jpg', 'dog.328.jpg', 'dog.214.jpg', 'dog.184.jpg', 'dog.461.jpg', 'dog.39.jpg', 'dog.113.jpg', 'dog.828.jpg', 'dog.392.jpg', 'dog.422.jpg', 'dog.707.jpg', 'dog.643.jpg', 'dog.170.jpg', 'dog.315.jpg', 'dog.768.jpg', 'dog.463.jpg', 'dog.217.jpg', 'dog.352.jpg', 'dog.91.jpg', 'dog.357.jpg', 'dog.98.jpg', 'dog.386.jpg', 'dog.243.jpg', 'dog.200.jpg', 'dog.662.jpg', 'dog.848.jpg', 'dog.542.jpg', 'dog.742.jpg', 'dog.897.jpg', 'dog.545.jpg', 'dog.475.jpg', 'dog.110.jpg', 'dog.97.jpg', 'dog.634.jpg', 'dog.874.jpg', 'dog.980.jpg', 'dog.605.jpg', 'dog.483.jpg', 'dog.224.jpg', 'dog.385.jpg', 'dog.616.jpg', 'dog.501.jpg', 'dog.802.jpg', 'dog.87.jpg', 'dog.399.jpg', 'dog.73.jpg', 'dog.359.jpg', 'dog.711.jpg', 'dog.701.jpg', 'dog.93.jpg', 'dog.365.jpg', 'dog.767.jpg', 'dog.186.jpg', 'dog.984.jpg', 'dog.910.jpg', 'dog.162.jpg', 'dog.179.jpg', 'dog.999.jpg', 'dog.215.jpg', 'dog.951.jpg', 'dog.558.jpg', 'dog.721.jpg', 'dog.77.jpg', 'dog.960.jpg', 'dog.337.jpg', 'dog.641.jpg', 'dog.732.jpg', 'dog.968.jpg', 'dog.282.jpg', 'dog.829.jpg', 'dog.815.jpg', 'dog.300.jpg', 'dog.390.jpg', 'dog.516.jpg', 'dog.955.jpg', 'dog.995.jpg', 'dog.432.jpg', 'dog.389.jpg', 'dog.303.jpg', 'dog.544.jpg', 'dog.557.jpg', 'dog.737.jpg', 'dog.79.jpg', 'dog.787.jpg', 'dog.252.jpg', 'dog.94.jpg', 'dog.773.jpg', 'dog.455.jpg', 'dog.792.jpg', 'dog.693.jpg', 'dog.203.jpg', 'dog.930.jpg', 'dog.913.jpg', 'dog.448.jpg', 'dog.570.jpg', 'dog.539.jpg', 'dog.697.jpg', 'dog.875.jpg', 'dog.663.jpg', 'dog.189.jpg', 'dog.760.jpg', 'dog.312.jpg', 'dog.588.jpg', 'dog.925.jpg', 'dog.554.jpg', 'dog.672.jpg', 'dog.944.jpg', 'dog.518.jpg', 'dog.202.jpg', 'dog.506.jpg', 'dog.581.jpg', 'dog.794.jpg', 'dog.998.jpg', 'dog.17.jpg', 'dog.233.jpg', 'dog.61.jpg', 'dog.241.jpg', 'dog.704.jpg', 'dog.140.jpg', 'dog.716.jpg', 'dog.459.jpg', 'dog.753.jpg', 'dog.945.jpg', 'dog.973.jpg', 'dog.291.jpg', 'dog.201.jpg', 'dog.932.jpg', 'dog.541.jpg', 'dog.330.jpg', 'dog.396.jpg', 'dog.911.jpg', 'dog.130.jpg', 'dog.335.jpg', 'dog.24.jpg', 'dog.264.jpg', 'dog.679.jpg', 'dog.477.jpg', 'dog.437.jpg', 'dog.78.jpg', 'dog.313.jpg', 'dog.472.jpg', 'dog.314.jpg', 'dog.511.jpg', 'dog.851.jpg', 'dog.736.jpg', 'dog.566.jpg', 'dog.450.jpg', 'dog.285.jpg', 'dog.321.jpg', 'dog.517.jpg', 'dog.418.jpg', 'dog.660.jpg', 'dog.640.jpg', 'dog.333.jpg', 'dog.567.jpg', 'dog.473.jpg', 'dog.674.jpg', 'dog.547.jpg', 'dog.649.jpg', 'dog.878.jpg', 'dog.125.jpg', 'dog.415.jpg', 'dog.766.jpg', 'dog.74.jpg', 'dog.440.jpg', 'dog.234.jpg', 'dog.687.jpg', 'dog.822.jpg', 'dog.939.jpg', 'dog.46.jpg', 'dog.82.jpg', 'dog.620.jpg', 'dog.644.jpg', 'dog.100.jpg', 'dog.167.jpg', 'dog.47.jpg', 'dog.92.jpg', 'dog.294.jpg', 'dog.267.jpg', 'dog.431.jpg', 'dog.199.jpg', 'dog.601.jpg', 'dog.523.jpg', 'dog.982.jpg', 'dog.922.jpg', 'dog.817.jpg', 'dog.171.jpg', 'dog.900.jpg', 'dog.593.jpg', 'dog.618.jpg', 'dog.615.jpg', 'dog.886.jpg', 'dog.709.jpg', 'dog.458.jpg', 'dog.869.jpg', 'dog.645.jpg', 'dog.936.jpg', 'dog.585.jpg', 'dog.564.jpg', 'dog.903.jpg', 'dog.377.jpg', 'dog.798.jpg', 'dog.929.jpg', 'dog.445.jpg', 'dog.363.jpg', 'dog.978.jpg', 'dog.192.jpg', 'dog.26.jpg', 'dog.607.jpg', 'dog.108.jpg', 'dog.648.jpg', 'dog.11.jpg', 'dog.621.jpg', 'dog.717.jpg', 'dog.391.jpg', 'dog.770.jpg', 'dog.924.jpg', 'dog.350.jpg', 'dog.813.jpg', 'dog.261.jpg', 'dog.216.jpg', 'dog.529.jpg', 'dog.612.jpg', 'dog.562.jpg', 'dog.838.jpg', 'dog.373.jpg', 'dog.912.jpg', 'dog.806.jpg', 'dog.825.jpg', 'dog.498.jpg', 'dog.154.jpg', 'dog.308.jpg', 'dog.556.jpg', 'dog.832.jpg', 'dog.114.jpg', 'dog.805.jpg', 'dog.258.jpg', 'dog.790.jpg', 'dog.846.jpg', 'dog.165.jpg', 'dog.388.jpg', 'dog.540.jpg', 'dog.619.jpg', 'dog.865.jpg', 'dog.343.jpg', 'dog.633.jpg', 'dog.0.jpg', 'dog.347.jpg', 'dog.220.jpg', 'dog.379.jpg', 'dog.299.jpg', 'dog.254.jpg', 'dog.159.jpg', 'dog.257.jpg', 'dog.460.jpg', 'dog.256.jpg', 'dog.338.jpg', 'dog.975.jpg', 'dog.90.jpg', 'dog.482.jpg', 'dog.811.jpg', 'dog.155.jpg', 'dog.382.jpg', 'dog.587.jpg', 'dog.985.jpg', 'dog.250.jpg', 'dog.532.jpg', 'dog.677.jpg', 'dog.582.jpg', 'dog.275.jpg', 'dog.290.jpg', 'dog.515.jpg', 'dog.449.jpg', 'dog.987.jpg', 'dog.706.jpg', 'dog.594.jpg', 'dog.691.jpg', 'dog.40.jpg', 'dog.408.jpg', 'dog.608.jpg', 'dog.935.jpg', 'dog.451.jpg', 'dog.849.jpg', 'dog.12.jpg', 'dog.584.jpg', 'dog.306.jpg', 'dog.69.jpg', 'dog.325.jpg', 'dog.397.jpg', 'dog.996.jpg', 'dog.84.jpg', 'dog.836.jpg', 'dog.157.jpg', 'dog.272.jpg', 'dog.429.jpg', 'dog.870.jpg', 'dog.406.jpg', 'dog.740.jpg', 'dog.572.jpg', 'dog.820.jpg', 'dog.502.jpg', 'dog.752.jpg', 'dog.142.jpg', 'dog.9.jpg', 'dog.508.jpg', 'dog.7.jpg', 'dog.524.jpg', 'dog.834.jpg', 'dog.456.jpg', 'dog.423.jpg', 'dog.169.jpg', 'dog.412.jpg', 'dog.891.jpg', 'dog.598.jpg', 'dog.146.jpg', 'dog.174.jpg', 'dog.739.jpg', 'dog.70.jpg', 'dog.713.jpg', 'dog.183.jpg', 'dog.259.jpg', 'dog.659.jpg', 'dog.86.jpg', 'dog.678.jpg', 'dog.41.jpg', 'dog.632.jpg', 'dog.785.jpg', 'dog.823.jpg', 'dog.733.jpg', 'dog.496.jpg', 'dog.499.jpg', 'dog.689.jpg', 'dog.879.jpg', 'dog.225.jpg', 'dog.843.jpg', 'dog.95.jpg', 'dog.22.jpg', 'dog.684.jpg', 'dog.971.jpg', 'dog.311.jpg', 'dog.153.jpg', 'dog.967.jpg', 'dog.669.jpg', 'dog.178.jpg', 'dog.845.jpg', 'dog.439.jpg', 'dog.400.jpg', 'dog.433.jpg', 'dog.489.jpg', 'dog.527.jpg', 'dog.490.jpg', 'dog.856.jpg', 'dog.57.jpg', 'dog.777.jpg', 'dog.53.jpg', 'dog.812.jpg', 'dog.452.jpg', 'dog.937.jpg', 'dog.682.jpg', 'dog.143.jpg', 'dog.537.jpg', 'dog.4.jpg', 'dog.920.jpg', 'dog.734.jpg', 'dog.462.jpg', 'dog.286.jpg', 'dog.51.jpg', 'dog.646.jpg', 'dog.145.jpg', 'dog.466.jpg', 'dog.245.jpg', 'dog.664.jpg', 'dog.29.jpg', 'dog.32.jpg', 'dog.50.jpg', 'dog.590.jpg', 'dog.744.jpg', 'dog.884.jpg', 'dog.85.jpg', 'dog.14.jpg', 'dog.647.jpg', 'dog.372.jpg', 'dog.135.jpg', 'dog.160.jpg', 'dog.855.jpg', 'dog.8.jpg', 'dog.301.jpg', 'dog.345.jpg', 'dog.441.jpg', 'dog.237.jpg', 'dog.342.jpg', 'dog.775.jpg', 'dog.867.jpg', 'dog.943.jpg', 'dog.425.jpg', 'dog.904.jpg', 'dog.96.jpg', 'dog.88.jpg', 'dog.101.jpg', 'dog.309.jpg', 'dog.361.jpg', 'dog.595.jpg', 'dog.226.jpg', 'dog.965.jpg', 'dog.376.jpg', 'dog.471.jpg', 'dog.574.jpg', 'dog.839.jpg', 'dog.606.jpg', 'dog.158.jpg', 'dog.504.jpg', 'dog.804.jpg', 'dog.942.jpg', 'dog.122.jpg', 'dog.329.jpg', 'dog.555.jpg', 'dog.284.jpg', 'dog.33.jpg', 'dog.791.jpg', 'dog.369.jpg', 'dog.909.jpg', 'dog.759.jpg', 'dog.283.jpg', 'dog.411.jpg', 'dog.563.jpg', 'dog.927.jpg', 'dog.268.jpg', 'dog.977.jpg', 'dog.116.jpg', 'dog.703.jpg', 'dog.637.jpg', 'dog.278.jpg', 'dog.795.jpg', 'dog.735.jpg', 'dog.908.jpg', 'dog.65.jpg', 'dog.712.jpg', 'dog.37.jpg', 'dog.362.jpg', 'dog.374.jpg', 'dog.626.jpg', 'dog.137.jpg', 'dog.144.jpg', 'dog.45.jpg', 'dog.416.jpg', 'dog.464.jpg', 'dog.276.jpg', 'dog.58.jpg', 'dog.68.jpg', 'dog.297.jpg', 'dog.840.jpg', 'dog.708.jpg', 'dog.731.jpg', 'dog.729.jpg', 'dog.443.jpg', 'dog.5.jpg', 'dog.835.jpg', 'dog.972.jpg', 'dog.629.jpg', 'dog.921.jpg', 'dog.393.jpg', 'dog.743.jpg', 'dog.592.jpg', 'dog.994.jpg', 'dog.419.jpg', 'dog.696.jpg', 'dog.857.jpg', 'dog.844.jpg', 'dog.519.jpg', 'dog.603.jpg', 'dog.665.jpg', 'dog.871.jpg', 'dog.332.jpg', 'dog.949.jpg', 'dog.403.jpg', 'dog.569.jpg', 'dog.864.jpg', 'dog.213.jpg', 'dog.718.jpg', 'dog.986.jpg', 'dog.578.jpg', 'dog.754.jpg', 'dog.509.jpg', 'dog.576.jpg', 'dog.756.jpg', 'dog.946.jpg', 'dog.638.jpg', 'dog.326.jpg', 'dog.653.jpg', 'dog.826.jpg', 'dog.531.jpg', 'dog.105.jpg', 'dog.340.jpg', 'dog.133.jpg', 'dog.210.jpg', 'dog.181.jpg', 'dog.923.jpg', 'dog.762.jpg', 'dog.236.jpg', 'dog.952.jpg', 'dog.934.jpg', 'dog.3.jpg', 'dog.800.jpg', 'dog.99.jpg', 'dog.274.jpg', 'dog.366.jpg', 'dog.132.jpg', 'dog.890.jpg', 'dog.89.jpg', 'dog.938.jpg', 'dog.371.jpg', 'dog.353.jpg', 'dog.454.jpg', 'dog.764.jpg', 'dog.341.jpg', 'dog.139.jpg', 'dog.728.jpg', 'dog.289.jpg', 'dog.375.jpg', 'dog.244.jpg', 'dog.16.jpg', 'dog.906.jpg', 'dog.381.jpg', 'dog.771.jpg', 'dog.320.jpg', 'dog.667.jpg', 'dog.131.jpg', 'dog.772.jpg', 'dog.901.jpg', 'dog.60.jpg', 'dog.597.jpg', 'dog.444.jpg', 'dog.36.jpg', 'dog.917.jpg', 'dog.676.jpg', 'dog.421.jpg', 'dog.407.jpg', 'dog.55.jpg', 'dog.627.jpg', 'dog.914.jpg', 'dog.206.jpg', 'dog.23.jpg', 'dog.31.jpg', 'dog.747.jpg', 'dog.271.jpg', 'dog.899.jpg', 'dog.695.jpg', 'dog.872.jpg', 'dog.323.jpg', 'dog.317.jpg', 'dog.854.jpg', 'dog.180.jpg', 'dog.799.jpg', 'dog.692.jpg', 'dog.156.jpg', 'dog.260.jpg', 'dog.841.jpg', 'dog.842.jpg', 'dog.222.jpg', 'dog.528.jpg', 'dog.690.jpg', 'dog.368.jpg', 'dog.642.jpg', 'dog.654.jpg', 'dog.953.jpg', 'dog.195.jpg', 'dog.331.jpg', 'dog.765.jpg', 'dog.128.jpg', 'dog.446.jpg', 'dog.720.jpg', 'dog.589.jpg', 'dog.650.jpg', 'dog.238.jpg', 'dog.600.jpg', 'dog.769.jpg', 'dog.405.jpg', 'dog.933.jpg', 'dog.969.jpg', 'dog.112.jpg', 'dog.198.jpg', 'dog.152.jpg', 'dog.579.jpg', 'dog.430.jpg', 'dog.71.jpg', 'dog.858.jpg', 'dog.346.jpg', 'dog.383.jpg', 'dog.821.jpg', 'dog.401.jpg', 'dog.958.jpg', 'dog.476.jpg', 'dog.666.jpg', 'dog.231.jpg', 'dog.394.jpg', 'dog.889.jpg', 'dog.577.jpg', 'dog.59.jpg', 'dog.266.jpg', 'dog.816.jpg', 'dog.548.jpg', 'dog.187.jpg', 'dog.831.jpg', 'dog.859.jpg', 'dog.380.jpg', 'dog.979.jpg', 'dog.559.jpg', 'dog.34.jpg', 'dog.240.jpg', 'dog.149.jpg', 'dog.725.jpg', 'dog.334.jpg', 'dog.150.jpg', 'dog.763.jpg', 'dog.880.jpg', 'dog.219.jpg', 'dog.543.jpg', 'dog.992.jpg', 'dog.722.jpg', 'dog.491.jpg', 'dog.882.jpg', 'dog.465.jpg', 'dog.319.jpg', 'dog.327.jpg', 'dog.398.jpg', 'dog.630.jpg', 'dog.710.jpg', 'dog.255.jpg', 'dog.190.jpg', 'dog.507.jpg', 'dog.223.jpg', 'dog.610.jpg', 'dog.119.jpg', 'dog.127.jpg', 'dog.263.jpg', 'dog.810.jpg', 'dog.115.jpg', 'dog.727.jpg', 'dog.503.jpg', 'dog.892.jpg', 'dog.239.jpg', 'dog.807.jpg', 'dog.963.jpg', 'dog.348.jpg', 'dog.293.jpg', 'dog.185.jpg', 'dog.622.jpg', 'dog.613.jpg', 'dog.227.jpg', 'dog.176.jpg', 'dog.426.jpg', 'dog.457.jpg', 'dog.741.jpg', 'dog.896.jpg', 'dog.931.jpg', 'dog.789.jpg', 'dog.48.jpg', 'dog.486.jpg', 'dog.853.jpg', 'dog.862.jpg', 'dog.38.jpg', 'dog.657.jpg', 'dog.166.jpg', 'dog.651.jpg', 'dog.533.jpg', 'dog.809.jpg', 'dog.565.jpg', 'dog.2.jpg', 'dog.66.jpg', 'dog.177.jpg', 'dog.916.jpg', 'dog.551.jpg', 'dog.228.jpg', 'dog.182.jpg', 'dog.730.jpg', 'dog.310.jpg', 'dog.788.jpg', 'dog.705.jpg', 'dog.604.jpg', 'dog.688.jpg', 'dog.336.jpg', 'dog.681.jpg', 'dog.6.jpg', 'dog.136.jpg', 'dog.196.jpg', 'dog.168.jpg', 'dog.628.jpg', 'dog.212.jpg', 'dog.351.jpg', 'dog.950.jpg', 'dog.885.jpg', 'dog.573.jpg', 'dog.281.jpg', 'dog.959.jpg', 'dog.467.jpg', 'dog.109.jpg', 'dog.470.jpg', 'dog.668.jpg', 'dog.1.jpg', 'dog.120.jpg', 'dog.887.jpg', 'dog.546.jpg', 'dog.898.jpg', 'dog.479.jpg', 'dog.656.jpg', 'dog.624.jpg', 'dog.318.jpg', 'dog.173.jpg', 'dog.782.jpg', 'dog.49.jpg', 'dog.919.jpg', 'dog.599.jpg', 'dog.873.jpg', 'dog.356.jpg', 'dog.957.jpg', 'dog.617.jpg', 'dog.997.jpg', 'dog.989.jpg', 'dog.262.jpg', 'dog.781.jpg', 'dog.494.jpg', 'dog.15.jpg', 'dog.623.jpg', 'dog.535.jpg', 'dog.680.jpg', 'dog.27.jpg', 'dog.161.jpg', 'dog.774.jpg', 'dog.625.jpg', 'dog.442.jpg', 'dog.28.jpg', 'dog.661.jpg', 'dog.636.jpg', 'dog.44.jpg', 'dog.302.jpg', 'dog.793.jpg', 'dog.780.jpg', 'dog.983.jpg', 'dog.510.jpg', 'dog.861.jpg', 'dog.324.jpg', 'dog.64.jpg', 'dog.188.jpg', 'dog.487.jpg', 'dog.940.jpg', 'dog.652.jpg', 'dog.249.jpg', 'dog.894.jpg', 'dog.803.jpg', 'dog.102.jpg', 'dog.970.jpg', 'dog.761.jpg', 'dog.378.jpg', 'dog.307.jpg', 'dog.358.jpg', 'dog.751.jpg', 'dog.738.jpg']
In [ ]:
In [ ]:
트레이닝 이미지와 밸리데이션 이미지를, 각각 몇개씩인지 확인해 본다.¶
In [12]:
len(os.listdir(train_dir+'/dogs'))
Out[12]:
1000
In [13]:
len(os.listdir(train_dir+'/cats'))
Out[13]:
1000
In [14]:
len(os.listdir(test_dir+'/dogs'))
Out[14]:
500
In [15]:
len(os.listdir(test_dir+'/cats'))
Out[15]:
500
In [ ]:
In [ ]:
In [ ]:
Building a Small Model from Scratch to Get to ~72% Accuracy¶
이미지의 사이즈를 150x150, 칼라(rgb) 로 처리하자.
In [17]:
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
In [18]:
def build_model() :
model = Sequential()
model.add( Conv2D(16, (3,3), activation='relu', input_shape=(150, 150, 3) ) )
model.add( MaxPooling2D((2,2) , 2 ))
model.add( Conv2D(32, (3,3), activation='relu' ) )
model.add( MaxPooling2D((2,2) , 2 ))
model.add( Conv2D(64, (3,3), activation='relu' ) )
model.add( MaxPooling2D((2,2) , 2 ))
model.add(Flatten())
model.add(Dense(512, 'relu'))
model.add(Dense(1, 'sigmoid'))
model.compile('rmsprop', 'binary_crossentropy', metrics=['accuracy'])
return model
In [19]:
model = build_model()
서머리 해보자
In [20]:
model.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 148, 148, 16) 448 max_pooling2d (MaxPooling2D (None, 74, 74, 16) 0 ) conv2d_1 (Conv2D) (None, 72, 72, 32) 4640 max_pooling2d_1 (MaxPooling (None, 36, 36, 32) 0 2D) conv2d_2 (Conv2D) (None, 34, 34, 64) 18496 max_pooling2d_2 (MaxPooling (None, 17, 17, 64) 0 2D) flatten (Flatten) (None, 18496) 0 dense (Dense) (None, 512) 9470464 dense_1 (Dense) (None, 1) 513 ================================================================= Total params: 9,494,561 Trainable params: 9,494,561 Non-trainable params: 0 _________________________________________________________________
In [ ]:
In [ ]:
RMSprop 으로 컴파일한다.¶
In [ ]:
In [ ]:
Data Preprocessing¶
ImageDataGenerator 사용하기
In [21]:
from keras.preprocessing.image import ImageDataGenerator
In [24]:
train_datagen = ImageDataGenerator(rescale=1/255.0) # 폴더마다 각각 만든다
In [25]:
test_datagen = ImageDataGenerator(rescale=1/255.0)
In [26]:
train_generator = train_datagen.flow_from_directory(train_dir, target_size = (150,150), class_mode = 'binary', batch_size = 20) # batch_size =20 == 20개씩 묶음으로 처리해라
Found 2000 images belonging to 2 classes.
In [27]:
test_generator = test_datagen.flow_from_directory(test_dir, target_size= (150,150), class_mode = 'binary', batch_size=20)
Found 1000 images belonging to 2 classes.
Training¶
15 epochs 로 학습해 보자.
In [28]:
epoch_history = model.fit(train_generator, epochs= 15, validation_data= (test_generator) , steps_per_epoch= 100 ) # steps_per_epoch=100 == batch_size=20 (아래공식에 따라, 같은것)
# 학습데이터 2000개 == 배치사이즈 X 스텝
Epoch 1/15 100/100 [==============================] - 18s 94ms/step - loss: 0.8415 - accuracy: 0.5570 - val_loss: 0.6607 - val_accuracy: 0.5960 Epoch 2/15 100/100 [==============================] - 8s 83ms/step - loss: 0.6524 - accuracy: 0.6425 - val_loss: 0.6101 - val_accuracy: 0.6970 Epoch 3/15 100/100 [==============================] - 9s 85ms/step - loss: 0.5600 - accuracy: 0.7245 - val_loss: 0.5866 - val_accuracy: 0.7070 Epoch 4/15 100/100 [==============================] - 9s 85ms/step - loss: 0.4876 - accuracy: 0.7685 - val_loss: 0.5739 - val_accuracy: 0.7320 Epoch 5/15 100/100 [==============================] - 9s 86ms/step - loss: 0.4070 - accuracy: 0.8085 - val_loss: 0.6023 - val_accuracy: 0.7130 Epoch 6/15 100/100 [==============================] - 8s 84ms/step - loss: 0.3241 - accuracy: 0.8645 - val_loss: 0.6906 - val_accuracy: 0.7140 Epoch 7/15 100/100 [==============================] - 9s 86ms/step - loss: 0.2630 - accuracy: 0.8935 - val_loss: 0.6666 - val_accuracy: 0.7310 Epoch 8/15 100/100 [==============================] - 10s 98ms/step - loss: 0.1858 - accuracy: 0.9265 - val_loss: 0.7943 - val_accuracy: 0.7250 Epoch 9/15 100/100 [==============================] - 9s 90ms/step - loss: 0.1207 - accuracy: 0.9560 - val_loss: 0.7994 - val_accuracy: 0.7020 Epoch 10/15 100/100 [==============================] - 8s 85ms/step - loss: 0.0887 - accuracy: 0.9740 - val_loss: 1.1665 - val_accuracy: 0.7090 Epoch 11/15 100/100 [==============================] - 8s 85ms/step - loss: 0.0731 - accuracy: 0.9710 - val_loss: 1.1989 - val_accuracy: 0.7160 Epoch 12/15 100/100 [==============================] - 9s 87ms/step - loss: 0.0608 - accuracy: 0.9795 - val_loss: 1.3441 - val_accuracy: 0.7200 Epoch 13/15 100/100 [==============================] - 9s 86ms/step - loss: 0.0585 - accuracy: 0.9845 - val_loss: 1.5738 - val_accuracy: 0.7210 Epoch 14/15 100/100 [==============================] - 8s 85ms/step - loss: 0.0459 - accuracy: 0.9865 - val_loss: 2.3166 - val_accuracy: 0.6600 Epoch 15/15 100/100 [==============================] - 9s 85ms/step - loss: 0.0196 - accuracy: 0.9930 - val_loss: 2.0281 - val_accuracy: 0.7160
In [29]:
# 평가
model.evaluate(test_generator)
50/50 [==============================] - 3s 56ms/step - loss: 2.0281 - accuracy: 0.7160
Out[29]:
[2.028092384338379, 0.7160000205039978]
In [ ]:
Running the Model¶
픽사베이에서 무료 사진 다운로드 받아서, 실제로 예측해 보자
In [30]:
# 잘돌아가는지 테스트
import numpy as np
from google.colab import files
from tensorflow.keras.preprocessing import image
uploaded = files.upload()
for fn in uploaded.keys() :
path = '/content/' + fn # 콘텍트디렉토리 저장
img = image.load_img(path, target_size=(150,150))
x = image.img_to_array(img) / 255.0
print(x)
print(x.shape)
x = np.expand_dims(x, axis = 0) # 차원변경
print(x.shape)
images = np.vstack( [x] )
classes = model.predict( images, batch_size = 10 )
print(classes)
if classes[0] > 0.5 : # 10개분류면 if가 10개
print(fn + " is a dog")
else :
print(fn + " is a cat")
Saving bbb.jpg to bbb.jpg [[[0.84313726 0.8156863 0.7764706 ] [0.8392157 0.8117647 0.77254903] [0.84705883 0.81960785 0.78039217] ... [0.6862745 0.6901961 0.6666667 ] [0.6901961 0.69411767 0.67058825] [0.7019608 0.7058824 0.6745098 ]] [[0.84313726 0.8156863 0.7764706 ] [0.84705883 0.81960785 0.78039217] [0.84705883 0.81960785 0.78039217] ... [0.6901961 0.69411767 0.67058825] [0.69803923 0.7019608 0.6784314 ] [0.7058824 0.70980394 0.6862745 ]] [[0.84313726 0.81960785 0.77254903] [0.84705883 0.8235294 0.7764706 ] [0.84705883 0.81960785 0.78039217] ... [0.69411767 0.69803923 0.6745098 ] [0.7019608 0.7058824 0.68235296] [0.7058824 0.70980394 0.6862745 ]] ... [[0.7529412 0.7372549 0.69411767] [0.7607843 0.74509805 0.7019608 ] [0.76862746 0.7529412 0.70980394] ... [0.654902 0.6431373 0.6862745 ] [0.6431373 0.627451 0.68235296] [0.627451 0.6117647 0.67058825]] [[0.7529412 0.7372549 0.69411767] [0.7607843 0.74509805 0.7019608 ] [0.7647059 0.7490196 0.7058824 ] ... [0.6509804 0.6392157 0.68235296] [0.6431373 0.627451 0.68235296] [0.63529414 0.61960787 0.6745098 ]] [[0.7490196 0.73333335 0.6901961 ] [0.7607843 0.74509805 0.7019608 ] [0.7647059 0.7490196 0.7058824 ] ... [0.654902 0.6313726 0.6784314 ] [0.6431373 0.6313726 0.6745098 ] [0.6392157 0.6156863 0.6627451 ]]] (150, 150, 3) (1, 150, 150, 3) 1/1 [==============================] - 0s 175ms/step [[0.99999857]] bbb.jpg is a dog
In [ ]:
Evaluating Accuracy and Loss for the Model¶
training/validation accuracy 와 loss 를 차트로 시각화 한다.
In [ ]:
In [ ]:
In [ ]:
overfitting 을 확인해 보자
'DataScience > TensorFlow[CNN]' 카테고리의 다른 글
딥러닝 텐서플로우 Transfer_Learning_and_Fine_Tunning (0) | 2023.01.02 |
---|---|
딥러니 텐서플로우 CNN을 이용하여, CIFAR-10 이미지 분류하기, 데이트셋이 이미 넘파이라면? (0) | 2023.01.02 |
딥러닝 텐서플로우 이미지 증강 예시 (0) | 2022.12.30 |
딥러닝 텐서플로우 CNN 인간,말 분류, 파이썬으로 압축풀기, 이미지파일을 넘파이 어레이로가져오기 (0) | 2022.12.30 |
딥러닝 텐서플로우 CNN의 기본개념 (0) | 2022.12.29 |