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())