前のインストールと設定keras線形回帰ニューラルネットワークを説明し、我々は、猫や犬のこのニューラルネットワークの認識を構築してみてください。
事前に犬や猫の画像をダウンロードkaggleデータ収集、ダウンロードリンク:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data
画像内のtest1.zipや鉄道模型の画像内で訓練するために使用されるtrain.zipアーカイブ、およびテストと内部モデルをテストするために使用されます。
どの絵を訓練、絵は、猫のようにラベルを果たしているcat.0.jpgで、犬はニューラルネットワークが学習を監督しているようにするために、dog.0.jgpあります。
CへTrain.zip最初の抽出物:\データ\列車\ディレクトリ、ノートウィンドウが\、十分なパス/または\\図です。
図1に示すように、画像の種類と量統計
輸入OSの 電車= 'C:\\ \\データ電車\\' 犬= [os.listdir(電車)で、私のために電車+ I Iの「犬の場合] 猫= [os.listdirで私のために電車+ I (電車)は、i]の「猫の場合 、印刷(LEN(犬)、LEN(猫))
12500 12500
#統計C:絵、完全な統計の数以下の\データ\列\は犬が12,500を持っていることがわかった、猫は12500を持っています。第二のステップで簡単に参照data_processという名前の最初のステップPYファイルとしてコードを保存します。(:\ユーザー\ XXX \ Cに現在のユーザーディレクトリを入れ、その後、アナコンダのインストールを使用してjupyterノートパソコンの場合)
2、写真を並べ替え
内部の犬や猫\ \ mini_trainningdata \電車をした後、500匹の猫を選び、500:Cに、それぞれ、選択された1000年と1000年、犬猫の写真内のデータ\列\から自動的にmini_trainningdataフォルダと呼ばれるファイルを自動的に作成しますCへの犬:\ mini_trainningdata \テスト\犬や猫の内部。
インポートOS createDir(パス)DEF: いない場合os.path.exists(パス): 試す: os.makedirs(パス) を除く: 印刷( "创建文件夹失败") の出口(1) パス= "C:/ min_trainingdata / " createDir(パス+"電車/犬") createDir(パス+"電車/猫") createDir(パス+"テスト/犬") createDir(パス+"テスト/猫」) のDPとして輸入data_process 輸入shutil リスト中の犬のための、猫(ジップ(dp.dogs、dp.cats))[1000]: shutil.copyfile(犬、パス+ "電車/犬/" + os.path.basename(犬)) プリント(os.path.basename(犬)+ "操作成功") shutil.copyfile(猫、パス+ "電車/猫/"+ os.path.basename(猫)) プリント(os.path.basename(CAT)+ "操作成功") 犬のために、リスト内の猫(ZIP(dp.dogs、dp.cats))[1000:1500]: shutil.copyfile(犬、パス+「試験/犬/」+ os.path.basename(犬)) プリント(os.path.basename(犬)+ "操作成功") shutil.copyfile(猫、パス+ "テスト/猫/" + os.path.basename (猫)) プリント(os.path.basename(猫)+ "操作成功")
図3に示すように、データ拡張
/users/xxx/catvsdogs/morph.py:Cに次のコードを保存
keras.preprocessing.imageインポートImageDataGeneratorから :train_dir = "/ mini_trainningdata /列車/ C" TEST_DIR = "C:/ mini_trainningdata /試験/" train_pic_gen = ImageDataGenerator(= 1/255スケール変更rotation_range = 20、width_shift_range = 0.2、height_shift_range = 0.2、 shear_range = 0.2、zoom_range = 0.5、horizontal_flip =真、fill_mode = '最寄り') test_pic_gen = ImageDataGenerator()= 1/255スケール変更 train_flow = train_pic_gen.flow_from_directory(train_dir、(128,128)、BATCH_SIZE = 32、class_mode = 'バイナリ') test_flow = test_pic_gen.flow_from_directory(TEST_DIR、(128,128)、BATCH_SIZE = 32、class_mode = 'バイナリ') #プリント(train_flow.class_indices)
4、建設およびトレーニングモデル
keras.modelsから順次インポート Convolution2D、MaxPool2D、平坦化、高密度、ドロップアウトをインポートkeras.layersから TensorBoardインポートkeras.callbacksから モデルは=シーケンシャル([ 活性化=」、Convolution2D(32,3,3、input_shape =(128,128,3) relu ')、 MaxPool2D(POOL_SIZE =(2,2))、 Convolution2D(64,3,3、input_shape =(128,128,3)、活性化=' relu ')、 MaxPool2D(POOL_SIZE =(2,2))、 平ら()、 高密度(64、活性化= 'relu')、 ドロップアウト(0.5)、 高密度(1、活性化= 'シグモイド') ]) model.summary() = 'binary_crossentropy model.compile(オプティマイザ= 'rmsprop'、損失」、メトリック= [ '精度']) インポートcatvsdogs。1増加参照データコード上方モーフ#としてモーフィング (model.fit_generator morph.train_flow、steps_per_epoch = 100、エポック= 50、冗長= 1、validation_data = morph.test_flow、validation_steps = 100、 コールバック= [TensorBoard(LOG_DIR =」/ログ/ 1 ')] ) model.save(' C: /mini_trainningdata/catdogs_model.h5' )
あなたがしたら、モデルが発売さと訓練されてきたでしょう。
5、リロードとトレーニングを続けます
keras.callbacksからTensorBoardをインポート keras.modelsからload_modelインポート = load_modelモデル:( 'C /mini_trainningdata/catdogs_model.h5') model.summary() モーフとしてインポートcatvsdogs.morph model.fit_generator( morph.train_flow、steps_per_epoch = 100、エポック= 50、冗長= 1、validation_data = morph.test_flow、validation_steps = 100、 コールバック= [TensorBoard(「/ログ/ 2 'LOG_DIR =)] ) model.save(' C:/mini_trainningdata/catdogs_model.h5' )
カスタムを使用して6、テスト画像
画像は独自のパスとパスの内側pre_x = get_inputs下でテストされるように変更することができます。
私たちは、2〜PIC0猫、犬、PIC6ワニ、pic7のサルを使用してPIC3〜5、pic8アイアンマンを、採用はテストのために入力しました。
コードの下にOpenCVの-のpythonをインストールする必要があります
OpenCVの-のpythonをインストールするPIP
kerasインポートモデルから NPとしてnumpyのをインポートする インポートCV2の :DEF get_inputs(SRC = []) pre_x = [] :秒間SRCに 入力= cv2.imread(S) 入力= cv2.resize(入力、(128、128)) 入力= cv2.cvtColor(入力、cv2.COLOR_BGR2RGB) pre_x.append(入力)#入力一张图片 pre_x = np.array(pre_x)/ 255.0 戻りpre_x DEF put_prey(pre_y、ラベル): 出力= [] yについてでpre_y: もしY [0] <0.5:#1二分类、此处只用一个神经元输出 output.append([ラベル[0]、1-Y [0]) 他: output.append([ラベル[1 ]、Y [0]]) リターン出力 モデル= models.load_model( 'C:/mini_trainningdata/catdogs_model.h5') pre_x = get_inputs([ 'C:\\ TESTDATA \\ pic0.jpg'、 'C:\\ TESTDATA \\ pic1.jpg'、 '\ \テストデータ\\ pic2.jpg ' 'C:\\テストデータ\\ pic3.jpg'、 'C:\\テストデータ\\ pic4.jpg'、 'C:\\テストデータ\\ pic5.jpg'、 C' \\ TESTDATA \\ pic6.jpg」、 'C:\\ TESTDATA \\ pic7.jpg'、 'C:\\ TESTDATA \\ pic8.jpg' ]) pre_y = model.predict(pre_x) インポートcatvsdogs。融点としてモーフィング 出力= put_prey(pre_y、リスト(mp.train_flow.class_indices.keys())) 、印刷(出力)
一つだけで、次に正解率はあまり高くないようにだけ猫2で3、3匹の前に、ルックスと、最後の3つが中に方法はありません確認されていません。