肉眼天文台

食メモとかたまに囲碁とか趣味についての雑記です

独学でPythonその2~aerial-cactus-identificationで遊んでみたの巻(前半)~

前回の

独学でPythonその1~iris.csv使って遊んでみたの巻~ - 肉眼天文台

を経て、今日は少し背伸びして画像データで遊んでみた。

以下、参考にしたサイトなど

github.com

イケメンンンンンンン!

 

まずは!パスを!通す!

ライブラリのインストール!

import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from IPython.display import Image, display

この手の行為がライブラリのインストールをしてるということが

なにを意味してるのかがやっと少し分かってきた。

 

ここもいつもの

train_csv = pd.read_csv('train.csv')
print(train_csv.describe())

前回のdtypesからデスクリベに変わっている事に気がついて調べてみた。

note.nkmk.me

 

ちなみに出力結果

         has_cactus

count  17500.000000
mean       0.750629
std        0.432662
min        0.000000
25%        1.000000
50%        1.000000
75%        1.000000
max        1.000000

要素の個数が17500個

算術平均が0.75うんたら

標準偏差0.43かんたら

最小値が0

1/4分位数が1

中央値が1

3/4分位数が1

最大値が1

 

分位数ってなんやねん!!

atarimae.biz

 

これも便利

print(train_csv.head())

print(train_csv.tail())

note.nkmk.me

 

出力結果

                                     id  has_cactus
0  0004be2cfeaba1c0361d39e2b000257b.jpg           1
1  000c8a36845c0208e833c79c1bffedd1.jpg           1
2  000d1e9a533f62e55c289303b072733d.jpg           1
3  0011485b40695e9138e92d0b3fb55128.jpg           1
4  0014d7a11e90b62848904c1418fc8cf2.jpg           1

                                         id  has_cactus
17495  ffede47a74e47a5930f81c0b6896479e.jpg           0
17496  ffef6382a50d23251d4bc05519c91037.jpg           1
17497  fff059ecc91b30be5745e8b81111dc7b.jpg           1
17498  fff43acb3b7a23edcc4ae937be2b7522.jpg           0
17499  fffd9e9b990eba07c836745d8aef1a3a.jpg           1

 

今回画像やからこれで一応見れるぽい

カクタスあり(1になってるやつ)
display(Image('train/0004be2cfeaba1c0361d39e2b000257b.jpg'))
display(Image('train/000c8a36845c0208e833c79c1bffedd1.jpg'))

カクタスなし(0になってるやつ)
display(Image('train/ffede47a74e47a5930f81c0b6896479e.jpg'))
display(Image('train/fff43acb3b7a23edcc4ae937be2b7522.jpg'))

 

ここから急に本気でビビる

filenames = ['train/' + fname for fname in train_csv['id'].tolist()]
labels = train_csv['has_cactus'].tolist()

train_filenames, val_filenames, train_labels, val_labels = train_test_split(filenames,
                                                                            labels,
                                                                            train_size=0.9,
                                                                            random_state=420)
 
にほんごでおk
 
tolistでtrain_csvの中のidの配列をリストにした模様
 
なので、
print(filenames)
すると
['train/0004be2cfeaba1c0361d39e2b000257b.jpg', 'train/000c8a36845c0208e833c79c1bffedd1.jpg', 'train/000d1e9a533f62e55c289303b072733d.jpg', 'train/0011485b40695e9138e92d0b3fb55128.jpg', 'train/0014d7a11e90b62848904c1418fc8cf2.jpg', 'train/0017c3c18ddd57a2ea6f9848c79d83d2.jpg', 'train/002134abf28af54575c18741b89dd2a4.jpg', 'train/0024320f43bdd490562246435af4f90b.jpg', 'train/002930423b9840e67e5a54afd4768a1e.jpg',ぶわぁー
 
print(labels)
すると
[1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, ぶわぁー
 
なるほどね
 
さらに、train_test_split関数でfilenamesとlabelsを訓練データとテストデータに分けたと
 
それぞれの数はこんな感じ
num_train = len(train_filenames)
num_val = len(val_filenames)
num_filenames = len(filenames)
print(num_filenames)
print(num_train)
print(num_val)
 
出力結果
17500
15750
1750
 
たしかに全体の0.9
だいぶ長くなったので前半はここまで