精華區beta NTUCH-HW 關於我們 聯絡資訊
https://blog.csdn.net/JinbaoSite/article/details/77435558 from PIL import Image from keras.utils import np_utils from keras.preprocessing import image from __future__ import print_function import keras from keras.datasets import cifar10 from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.callbacks import History history = History() batch_size = 32 num_classes = 6 epochs = 100 img_width, img_height = 150, 150 def load_data(): data = np.empty((510,150,150,3),dtype="float32") label = np.empty((510,)) imgs = os.listdir(r"C:\Users\user\Desktop\birds\train") #num = len(imgs) num =510 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 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 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 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 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 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 else: break return data,label train_data,train_labels = load_data() y_train = keras.utils.to_categorical(train_labels, num_classes) x_train = train_data.astype('float32') x_train /= 255 model = Sequential() model.add(Conv2D(32, (3, 3), padding='same',input_shape=train_data.shape[1:])) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes)) model.add(Activation('softmax')) opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6) # Let's train the model using RMSprop model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy']) histroy=modela.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, callbacks=[history], validation_data=(datatest, y_test), shuffle=True) score = modela.evaluate(datatest, y_test, verbose=0) def load_data1(): data = np.empty((70,150,150,3),dtype="float32") label = np.empty((70,)) imgs = os.listdir(r"C:\Users\user\Desktop\birds\test1") num = len(imgs) num = 70 for i in range(num): if "egr" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32")#test1要再改 arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 0 elif "man" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 1 elif "owl" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 2 elif "puf" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 3 elif "tou" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 4 elif "wod" in imgs[i]: img = Image.open("C:/Users/user/Desktop/birds/test1/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((150,150,3)) data[i, :, :, :] = arr label[i] = 5 else: break return data,label datatest,labeltest = load_data1() datatest=datatest.astype("float32")/255 y_test=np_utils.to_categorical(labeltest,num_classes=6) predict=model.predict_classes(datatest) import pandas as d pd.crosstab(labeltest.reshape(-1),predict,rownames=["label"],colnames=["predict"]) score = model.evaluate(datatest, y_test, verbose=0) history.loss_plot('epoch') class LossHistory(keras.callbacks.Callback): def on_train_begin(self, logs={}): self.losses = {'batch': [], 'epoch': []} self.accuracy = {'batch': [], 'epoch': []} self.val_loss = {'batch': [], 'epoch': []} self.val_acc = {'batch': [], 'epoch': []} def on_batch_end(self, batch, logs={}): self.losses['batch'].append(logs.get('loss')) self.accuracy['batch'].append(logs.get('acc')) self.val_loss['batch'].append(logs.get('val_loss')) self.val_acc['batch'].append(logs.get('val_acc')) def on_epoch_end(self, batch, logs={}): self.losses['epoch'].append(logs.get('loss')) self.accuracy['epoch'].append(logs.get('acc')) self.val_loss['epoch'].append(logs.get('val_loss')) self.val_acc['epoch'].append(logs.get('val_acc')) def loss_plot(self, loss_type): iters = range(len(self.losses[loss_type])) #创建一个图 plt.figure() # acc plt.plot(iters, self.accuracy[loss_type], 'r', label='train acc')#plt.plot(x,y),这个将数据画成曲线 # loss plt.plot(iters, self.losses[loss_type], 'g', label='train loss') if loss_type == 'epoch': # val_acc plt.plot(iters, self.val_acc[loss_type], 'b', label='val acc') # val_loss plt.plot(iters, self.val_loss[loss_type], 'k', label='val loss') plt.grid(True)#设置网格形式 plt.xlabel(loss_type) plt.ylabel('acc-loss')#给x,y轴加注释 plt.legend(loc="upper right")#设置图例显示位置 plt.show() history = LossHistory()