Keras CNN 训练数据(二):训练

整个训练的代码如下:

import os
import numpy as np
from PIL import Image
from keras.models import Sequential
from keras.layers import Convolution2D, Flatten, MaxPooling2D, Dense, Activation
from keras.optimizers import Adam
from keras.utils import np_utils

#Pre process images

class PreFile(object):
    def __init__(self, FilePath, DogType):
        self.FilePath = FilePath
        self.DogType = DogType

    def FileReName(self):
        count = 0
        for type in self.DogType:
            subfolder = os.listdir(self.FilePath + type)
            for subclass in subfolder:
                print('count_classese:-->',count)
                print(subclass)
                print(self.FilePath + type + subclass)
                os.rename(self.FilePath + type + '/' + subclass, self.FilePath + 
                type + '/' + str(count) + '_' + subclass.split('.')[0])
            count += 1

    def FileResize(self, Width, Hight, Output_folder):
        for type in self.DogType:
            print(type)
            file = os.listdir(self.FilePath + type)
            for i in file:
                img_open = Image.open(self.FilePath + type + '/' + i)
                conv_RGB = img_open.convert('RGB')
                new_img = conv_RGB.resize((Width, Hight), Image.BILINEAR)
                new_img.save(os.path.join(Output_folder, os.path.basename(i)))

#main training program
class Training(object):
    def __init__(self, batch_size, number_batch, categories, train_floder):
        self.batch_size = batch_size
        self.number_batch = number_batch
        self.categories = categories
        self.train_floder = train_floder

    #Read image and return Numpy array
    def read_train_images(self, filename):
        img = Image.open(self.train_floder + filename)
        return np.array(img)

    def train(self):
        train_img_list = []     #x_train
        train_label_list = []   #y_train
        for file in os.listdir(self.train_floder):
            file_img_in_array = self.read_train_images(filename = file)
            train_img_list.append(file_img_in_array)
            train_label_list.append(int(file.split('_')[0]))
        train_img_list = np.array(train_img_list)
        train_label_list = np.array(train_label_list)

        train_label_list = np_utils.to_categorical(train_label_list,
                                                   self.categories) 

        train_img_list = train_img_list.astype('float32')
        train_img_list /= 255.0

        #-- step Neural Network CNN
        model = Sequential()

        #CNN Layer - 1  #input shape (40,100,100,3)
        model.add(Convolution2D(
            input_shape=(100,100,3),
            filters=32, #next layer output (100,100,32)
            kernel_size=(5,5), #pixel filtered
            padding='same',  #外边距处理
        ))
        model.add(Activation('relu'))
        model.add(MaxPooling2D(
            pool_size=(2,2),  # Output next layer (50,50,32)
            strides=(2,2),
            padding='same'
        ))

        #CNN Layer - 2
        model.add(Convolution2D(
            filters=64,  # next layer output (50,50,64)
            kernel_size=(2, 2),  # pixel filtered
            padding='same',  # 外边距处理
        ))
        model.add(Activation('relu'))
        model.add(MaxPooling2D(
            pool_size=(2, 2),  # Output next layer (25,25,64)
            strides=(2, 2),
            padding='same'
        ))

        #Fully connected Layer - 1
        model.add(Flatten())  #降维打击
        model.add(Dense(1024))
        model.add(Activation('relu'))

        #Fully connected Layer - 2
        model.add(Dense(512))
        model.add(Activation('relu'))

        #Fully connected Layer - 3
        model.add(Dense(256))
        model.add(Activation('relu'))

        #Fully connected Layer - 4
        model.add(Dense(self.categories))
        model.add(Activation('softmax'))

        #Define Optimizer
        adam = Adam(lr=0.0001)
        model.compile(optimizer=adam,
                      loss='categorical_crossentropy',
                      metrics=['accuracy']
                      )

        # Fire up the network

        model.fit(
            x=train_img_list,
            y=train_label_list,
            epochs=self.number_batch,
            batch_size=self.batch_size,
            verbose=1
        )

        # Save your model
        model.save('./dogfinder.h5')

def main():
    DogType = ['哈士奇','德国牧羊犬']
    Train = Training(batch_size=1024,
                     number_batch=30,
                     categories=2,
                     train_floder='train_img/')
    Train.train()

main()

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值