精華區beta NTUCH-HW 關於我們 聯絡資訊
from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from keras import backend as K img_width, img_height = 150, 150 train_data_dir = "C:\Users\user\Desktop\birds\train" validation_data_dir = 'test' nb_train_samples = 540 nb_validation_samples = 60 epochs = 100 batch_size = 20 if K.image_data_format() == 'channels_first': input_shape = (3, img_width, img_height) else: input_shape = (img_width, img_height, 3) model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=input_shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(64)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(6)) #6分类 model.add(Activation('softmax')) #采用Softmax model.compile(loss='categorical_crossentropy', #多分类 optimizer='rmsprop', metrics=['accuracy']) # this is the augmentation configuration we will use for training train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) # this is the augmentation configuration we will use for testing: # only rescaling test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='categorical') #多分类 validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_width, img_height), batch_size=batch_size, class_mode='categorical') #多分类 model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=nb_validation_samples // batch_size) import os # 处理字符串路径 import glob # 查找文件 from keras.models import Sequential # 导入Sequential模型 from keras.layers.core import Flatten, Dense, Dropout from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D from keras.optimizers import SGD import numpy as np from pandas import Series, DataFrame from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation, Flatten from keras.layers.advanced_activations import PReLU from keras.layers.convolutional import Convolution2D, MaxPooling2D from keras.optimizers import SGD, Adadelta, Adagrad from keras.utils import np_utils, generic_utils from six.moves import range nb_train_samples = 540 batch_size = 20 nb_validation_samples = 60 def load_data(): sed = 1000 data = np.empty((540,150,150,3),dtype="float32") label = np.empty((540,)) imgs = os.listdir(r"C:\Users\user\Desktop\birds\train") num = len(imgs) times = 0 time = 0 for i in range(num): if "egr" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 0 #times +=1 elif "man" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 1 #times +=1 elif "owl" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 2 #times +=1 elif "puf" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 3 #times +=1 elif "tou" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 4 #times +=1 elif "wod" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 5 #times +=1 else: break return data,label train_data,train_labels = load_data() train_data=train_data.astype("float32")/255 def load_data1(): sed = 1000 data = np.empty((60,150,150,3),dtype="float32") label = np.empty((60,)) imgs = os.listdir(r"C:\Users\user\Desktop\birds\test") num = len(imgs) times = 0 time = 0 for i in range(num): if "egr" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 0 #times +=1 elif "man" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 1 #times +=1 elif "owl" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 2 #times +=1 elif "puf" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 3 #times +=1 elif "tou" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 4 #times +=1 elif "wod" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 5 #times +=1 else: break return data,label datatest,labeltest = load_data1() datatest=datatest.astype("float32")/255 y_train=np_utils.to_categorical(train_labels,num_classes=6) #np.utils.to_categorical : 若 y=2 -> [[ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]] y_test=np_utils.to_categorical(labeltest,num_classes=6) model = Sequential() model.add(Convolution2D(32, (3, 3),input_shape=input_shape)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Activation('relu')) model.add(Dropout(0.5)) #sigmoid分类,输出是2类别 model.add(Dense(6)) model.add(Activation('softmax')) rmsprop=RMSprop(lr=0.001,rho=0.9,epsilon=1e-08,decay=0.0) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.fit(train_data, y_train, steps_per_epoch=nb_train_samples // batch_size, validation_steps=nb_validation_samples // batch_size, epochs=50, validation_data=(datatest, y_test)) model.fit(train_data, y_train, epochs=50) model.fit(train_data, y_train, nb_epoch=50, batch_size=20, validation_data=(datatest, y_test)) model.fit(train_data, y_train, epochs=50, batch_size=20 ) imgs = os.listdir("C:\Users\user\Desktop\birds\train") plt.imshow(arr) for i in range(num): if "egr" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 0 #times +=1 elif "man" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 1 #times +=1 elif "owl" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 2 #times +=1 elif "puf" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 3 #times +=1 elif "tou" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 4 #times +=1 elif "wod" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 5 #times +=1 else: break te=data[101,:,:,:] Image.fromarray(te) print (np.shape(arr)) Image.fromarray(np.uint8(arr)) tee=arr.resize((150,150,3)) train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) print(model.summary())