X-房子的尺寸(小狗的圖片)
Y-房子的價格(小狗的類別)
img = Image.open(img_path)
new_img = img.resize((100, 100), Image.BILINEAR)
new_img.save(os.path.join('./dog_kinds_after/' + dog_name, jpgfile))
kind = 0
images = os.listdir(images_path)
for name in images:
image_path = images_path + '/'
os.rename(image_path + name, image_path + str(kind) +'_' + name.split('.')[0]+'.jpg')
ima_train = os.listdir('./train')
# 1.把圖片轉換為矩陣
def read_train_image(filename):
img = Image.open('./train/' + filename).convert('RGB')
return np.array(img)
x_train = []
for i in ima_train:
x_train.append(read_train_image(i))x_train = np.array(x_train)
# 3.提取kind類別作為標籤
y_train = []
for filename in ima_train:
y_train.append(int(filename.split('_')[0]))
y_train = np.array(y_train)
y_train = y_train - 1
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
print(y_test)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255print(x_train.shape)
print(y_train.shape)
3 搭建卷積神經網絡
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4, activation='softmax'))
對上圖來說,就是根據數據集,不斷的迭代,找到一條最近似的直線(y = kx + b),把參數k,b保存下來,預測的時候直接加載。
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=10, epochs=32)
model.save_weights('./dog_weights.h5', overwrite=True)
score = model.evaluate(x_test, y_test, batch_size=10)
print(score)
name = input('上傳圖片的名稱(例如:XX.jpg)為:')
model.load_weights('dog_weights.h5')
classes = model.predict_classes(x_test)[0]
target = ['京巴', '拉布拉多', '柯基', '泰迪']
print("識別結果為:" + target[classes])