kerasを使ったcnn

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
kerasを使ったcnn [2018/05/08 11:05] suikoukerasを使ったcnn [Unknown date] (現在) – 削除 - 外部編集 (Unknown date) 127.0.0.1
行 1: 行 1:
-# kerasを使ってvgg16の転移学習 
  
-m208.sにはGTX1050のGPUがついているので、まずはm208.sにsshでログインする 
- 
-``` 
-sudo docker pull nvidia/cuda:9.0-cudnn7-devel 
-sudo docker run --runtime=nvidia --name yoshitake03 -it nvidia/cuda:9.0-cudnn7-devel /bin/bash #yoshitake03は適当に変える 
-apt-get update 
-apt install -y ssh python3-pip nano git unzip screen eog 
-echo "termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l' 
-defscrollback 100000 
-screen /bin/bash" > ~/.screenrc 
- 
-python3 -m pip install --upgrade pip 
-python3 -m pip install keras 
-python3 -m pip install tensorflow-gpu 
-python3 -m pip install ipython 
-python3 -m pip install opencv-python 
-python3 -m pip install tqdm 
-python3 -m pip install Pillow 
-python3 -m pip install matplotlib 
- 
-apt install -y libglib2.0 libsm6 libxext6 libfontconfig1 libxrender1 python3-tk 
-なんとかlibcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb とlibcudnn7_7.0.5.15-1+cuda9.0_amd64.debをコピーしてくる。 
-dpkg -i libcudnn7* 
- 
-もし途中でdockerを抜けていて、再開したいときは 
-sudo docker start -i yoshitake03 
- 
-byte形式の画像データの確認方法 
-od -An -v -tu1 -j16 -w28 train-images-idx3-ubyte |more 
-``` 
- 
-下記のフォルダを作り、その中にさらにカテゴリごとにフォルダを作り画像を入れておく。(例:犬の写真の場合、ディレクトリtrain/dogを作り、その中にdog01.jpg, dog02.jpg, ... をコピーする。) 
- 
-train, validate, test 
- 
-学習用のpythonスクリプト 
- 
-実行する場合、python3 jiseki-vgg16.pyなどとする 
-``` 
-from keras.models import Model 
-from keras.layers import Dense, GlobalAveragePooling2D,Input, Flatten, Activation, Dropout 
-from keras.applications.vgg16 import VGG16 
-from keras.preprocessing.image import ImageDataGenerator 
-from keras.optimizers import SGD 
-from keras.models import Sequential 
-from keras.callbacks import CSVLogger 
- 
-n_categories=132 
-batch_size=32 
-train_dir='jiseki/train' 
-validation_dir='jiseki/validation' 
-file_name='jiseki_vgg16' 
- 
-base_model=VGG16(weights='imagenet',include_top=False, 
-                 input_tensor=Input(shape=(224,224,3))) 
- 
-#add new layers instead of FC networks 
- 
-x=base_model.output 
-#x=GlobalAveragePooling2D()(x) 
-x=Flatten()(x) 
-x=Dense(1024,activation='relu')(x) 
-prediction=Dense(n_categories,activation='softmax')(x) 
-model=Model(inputs=base_model.input,outputs=prediction) 
-#top_model = Sequential() 
-#top_model.add(Flatten(input_shape=base_model.output_shape[1:])) 
-#top_model.add(Dense(256)) 
-#top_model.add(Activation("relu")) 
-#top_model.add(Dropout(0.5)) 
-#top_model.add(Dense(n_categories)) 
-#top_model.add(Activation("softmax")) 
-#model = Model(input=base_model.input, output=top_model(base_model.output)) 
- 
-#fix weights before VGG16 14layers 
-for layer in base_model.layers[:15]: 
-    layer.trainable=False 
- 
-#model.compile(optimizer=SGD(lr=0.0001,momentum=0.9), 
-#              loss='categorical_crossentropy', 
-#              metrics=['accuracy']) 
-model.compile(loss='categorical_crossentropy', 
-              optimizer=SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True), 
-              metrics=['accuracy']) 
- 
-model.summary() 
- 
-#save model 
-json_string=model.to_json() 
-open(file_name+'.json','w').write(json_string) 
- 
-train_datagen=ImageDataGenerator( 
-    rescale=1.0/255, 
-    rotation_range=180, 
-#    width_shift_range=0.1, 
-    height_shift_range=0.1, 
-#    shear_range=0.2, 
-#    zoom_range=0.2, 
-    horizontal_flip=True) 
- 
-validation_datagen=ImageDataGenerator(rescale=1.0/255) 
- 
-train_generator=train_datagen.flow_from_directory( 
-    train_dir, 
-    target_size=(224,224), 
-    batch_size=batch_size, 
-    class_mode='categorical', 
-    shuffle=True 
-) 
- 
-validation_generator=validation_datagen.flow_from_directory( 
-    validation_dir, 
-    target_size=(224,224), 
-    batch_size=batch_size, 
-    class_mode='categorical', 
-    shuffle=True 
-) 
- 
-hist=model.fit_generator(train_generator, 
-                         epochs=500, 
-                         verbose=1, 
-                         validation_data=validation_generator, 
-                         callbacks=[CSVLogger(file_name+'.csv')]) 
- 
-#save weights 
-model.save(file_name+'.h5') 
-``` 
- 
-判定用のスクリプト 
- 
-使用方法は 
- 
-python3 jiseki_predict.py xxx.jpg 
- 
-``` 
-from keras.models import model_from_json 
-import matplotlib.pyplot as plt 
-import numpy as np 
-import os,random 
-from keras.preprocessing.image import img_to_array, load_img 
-from keras.preprocessing.image import ImageDataGenerator 
-from keras.optimizers import SGD 
-import sys 
- 
-batch_size=32 
-file_name='jiseki_vgg16' 
-test_dir='jiseki/test' 
-display_dir='jiseki/display' 
-label=['Albulidae-Albula','Albulidae-Pterothrissus','Alepocephalidae-Alepocephalus','Alepocephalidae-Xenodermichthys','Anguillidae-Anguilla','Antennariidae-Antennarius','Antennariidae-His 
-trio','Argentinidae-Argentina','Argentinidae-Glossanodon','Ariidae-Arius','Ariidae-Netuma','Ariidae-Plicofollis','Ateleopodidae-Ateleopus','Ateleopodidae-Ijimaia','Atherinidae-Atherinomor 
-us','Atherinidae-Hypoatherina','Aulopidae-Hime','Bagridae-Pseudobagrus','Bregmacerotidae-Bregmaceros','Carapidae-Pyramodon','Chanidae-Chanos','Chaunacidae-Chaunax','Chlorophthalmidae-Chlo 
-rophthalmus','Clupeidae-Amblygaster','Clupeidae-Etrumeus','Clupeidae-Herklotsichthys','Clupeidae-Nematalosa','Clupeidae-Sardinella','Congridae-Bathymyrus','Congridae-Conger','Congridae-Ma 
-crocephenchelys','Congridae-Rhynchoconger','Congridae-Uroconger','Cyprinidae-Acrossocheilus','Cyprinidae-Aristichthys','Cyprinidae-Candidia','Cyprinidae-Carassius','Cyprinidae-Chanodichth 
-ys','Cyprinidae-Clarias','Cyprinidae-Culter','Cyprinidae-Cyprinus','Cyprinidae-Gobiobotia','Cyprinidae-Hemiculter','Cyprinidae-Hypsibarbus','Cyprinidae-Mylopharyngodon','Cyprinidae-Onycho 
-stoma','Cyprinidae-Opsariichthys','Cyprinidae-Pseudorasbora','Cyprinidae-Puntius','Cyprinidae-Rhodeus','Cyprinidae-Spinibarbus','Cyprinidae-Tanakia','Elopidae-Elops','Engraulidae-Engrauli 
-s','Engraulidae-Setipinna','Engraulidae-Stolephorus','Engraulidae-Thryssa','Exocoetidae-Cheilopogon','Exocoetidae-Cypselurus','Exocoetidae-Exocoetus','Exocoetidae-Hirundichthys','Exocoeti 
-dae-Oxyporhamphus','Gigantactinidae-Gigantactis','Gonorynchidae-Gonorynchus','Gonostomatidae-Gonostoma','Gonostomatidae-Sigmops','Lophiidae-Lophiodes','Lophiidae-Lophiomus','Lophiidae-Lop 
-hius','Lophotidae-Lophotus','Macrouridae-Coelorinchus','Macrouridae-Coelorinclus','Macrouridae-Coryphaenoides','Macrouridae-Hymenocephalus','Macrouridae-Lucigadus','Macrouridae-Malacoceph 
-alus','Macrouridae-Nezumia','Macrouridae-Ventrifossa','Megalopidae-Megalops','Melanocetidae-Melanocetus','Moridae-Gadella','Moridae-Laemonema','Moridae-Physiculus','Moringuidae-Moringua', 
-'Mugilidae-Chelon','Mugilidae-Moolgarda','Mugilidae-Mugil','Muraenesocidae-Gavialiceps','Muraenesocidae-Muraenesox','Muraenidae-Echidna','Muraenidae-Enchelycore','Muraenidae-Gymmothorax', 
-'Myctophidae-Benthosema','Myctophidae-Diaphus','Myctophidae-Electrona','Myctophidae-Myctophum','Nemichthyidae-Nemichthys','Neoscopelidae-Neoscopelus','Notacanthidae-Notacanthus','Ogcoceph 
-alildae-Halieutaea','Ogcocephalildae-Malthopsis','Ogcocephalildae-Solocisquama','Ophidiidae-Glyptophidium','Ophidiidae-Hoplobrotula','Ophidiidae-Neobythites','Ophidiidae-Ophidion','Osmeri 
-dae-Plecoglossus','Paralepididae-Lestidium','Paralepididae-Lestrolepis','Plotosidae-Plotosus','Polymixiidae-Polymixia','Pristigasteridae-Ilisha','Regalecidae-Regalecus','Salmonidae-Oncorh 
-ynchus','Sternoptychidae-Argyropelecus','Sternoptychidae-Maurolicus','Sternoptychidae-Polyipnus','Stomiidae-Astronesthes','Stomiidae-Chauliodus','Stomiidae-Photonectes','Stomiidae-Stomias 
-','Synaphobranchidae-Dysomma','Synaphobranchidae-Echelus','Synaphobranchidae-Meadia','Synaphobranchidae-Neenchelys','Synaphobranchidae-Ophichthus','Synaphobranchidae-Pisodonophis','Synodo 
-ntidae-Harpadon','Synodontidae-Saurida','Synodontidae-Synodus','Synodontidae-Trachinocephalus','Trachipteridae-Trachipterus'] 
- 
-#load model and weights 
-json_string=open(file_name+'.json').read() 
-model=model_from_json(json_string) 
-model.load_weights(file_name+'.h5') 
- 
-model.compile(optimizer=SGD(lr=0.0001,momentum=0.9), 
-              loss='categorical_crossentropy', 
-              metrics=['accuracy']) 
- 
-#data generate 
-test_datagen=ImageDataGenerator(rescale=1.0/255) 
- 
-#test_generator=test_datagen.flow_from_directory( 
-#    test_dir, 
-#    target_size=(224,224), 
-#    batch_size=batch_size, 
-#    class_mode='categorical', 
-#    shuffle=True 
-#) 
- 
-#evaluate model 
-#score=model.evaluate_generator(test_generator) 
-#print('\n test loss:',score[0]) 
-#print('\n test_acc:',score[1]) 
- 
-#predict model and display images 
-#files=os.listdir(display_dir) 
-#img=random.sample(files,2) 
- 
-for i in sys.argv[1:] : 
-  temp_img=load_img(sys.argv[1],target_size=(224,224)) 
-#  plt.imshow(temp_img) 
-  temp_img_array=img_to_array(temp_img) 
-  temp_img_array=temp_img_array.astype('float32')/255.0 
-  temp_img_array=temp_img_array.reshape((1,224,224,3)) 
-  img_pred=model.predict(temp_img_array) 
-  print(i+": "+label[np.argmax(img_pred)]) 
-  temp_res_list={} 
-  k=0 
-  for j in img_pred[0]: 
-    temp_res_list[k]=j 
-    k=k+1 
-  temp_res_sort=sorted(temp_res_list.items(), key=lambda x:x[1], reverse=True) 
-  print("1: "+label[temp_res_sort[0][0]]+" "+str(temp_res_sort[0][1])) 
-  print("2: "+label[temp_res_sort[1][0]]+" "+str(temp_res_sort[1][1])) 
-  print("3: "+label[temp_res_sort[2][0]]+" "+str(temp_res_sort[2][1])) 
-  print("4: "+label[temp_res_sort[3][0]]+" "+str(temp_res_sort[3][1])) 
-  print("5: "+label[temp_res_sort[4][0]]+" "+str(temp_res_sort[4][1])) 
-  del temp_img 
-  del img_pred 
-``` 
  • kerasを使ったcnn.1525777513.txt.gz
  • 最終更新: 2018/05/08 11:05
  • by suikou