%matplotlib inline
import numpy as np
import os
import matplotlib.pyplot as plt
fnames = np.array([f'train/{f}' for f in sorted(os.listdir('train/'))])
labels = np.array([(0 if 'cat' in fname else 1) for fname in fnames])
from keras.applications.resnet50 import ResNet50
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
ResNet50_model = ResNet50(weights='imagenet',include_top = False,input_shape=(224,224,3))
x=ResNet50_model.output
x=GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
changed_model = Model(inputs=ResNet50_model.input, outputs=Dense(1, activation='sigmoid')(x))
changed_model.summary()
changed_model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
from sklearn.model_selection import train_test_split
from keras.utils import to_categorical
X_train,X_valid, y_t, y_v =train_test_split(fnames,labels,test_size=0.2, random_state=1)
y_train=to_categorical(y_t)
y_valid=to_categorical(y_v)
print(X_train[0:2])
print(y_train[0:2])
y_valid[2].shape
from keras.preprocessing import image
from tqdm import tqdm
def path_to_tensor(img_path):
# 用PIL加载RGB图像为PIL.Image.Image类型
img = image.load_img(img_path, target_size=(224, 224))
# 将PIL.Image.Image类型转化为格式为(224, 224, 3)的3维张量
x = image.img_to_array(img)
# 将3维张量转化为格式为(1, 224, 224, 3)的4维张量并返回
return np.expand_dims(x, axis=0)
def paths_to_tensor(img_paths):
list_of_tensors = [path_to_tensor(img_path) for img_path in tqdm(img_paths)]
return np.vstack(list_of_tensors)