Giả sử, bạn có một csv, sao cho hình ảnh của bạn và các tính năng khác có trong tệp.
Trong đó id đại diện cho tên hình ảnh và theo sau là các tính năng và theo sau là mục tiêu của bạn, (lớp để phân loại, số cho sự hồi quy)
đầu tiên chúng ta hãy định nghĩa một trình tạo dữ liệu và sau đó chúng ta có thể ghi đè lên nó.
chúng ta hãy đọc dữ liệu từ csv trong khung dữ liệu của gấu trúc và sử dụng Flow_from_dataframe của keras để đọc từ khung dữ liệu.
df = pandas.read_csv("dummycsv.csv")
datagen = ImageDataGenerator(rescale=1/255.)
generator = datagen.flow_from_dataframe(df,directory="out/",x_col="id",y_col=df.columns[1:],class_mode="raw",batch_size=1)
Bạn luôn có thể thêm tính năng tăng cường của mình trong ImageDataGenerator.
Những điều cần lưu ý trong đoạn mã trên trong Flow_from_dataframe là
x_col = tên hình ảnh
y_col = thường là các cột có tên lớp, nhưng chúng ta hãy ghi đè nó sau bằng cách trước tiên cung cấp tất cả các cột khác trong csv. tức là feat_1, feat_2 .... cho đến class_label
class_mode = raw, đề nghị trình tạo trả về tất cả các giá trị trong y.
Bây giờ chúng ta hãy ghi đè / kế thừa trình tạo ở trên và tạo một cái mới, sao cho nó trả về [img, otherfeatures], [target]
Đây là mã với ý kiến như giải thích
def my_custom_generator():
count = 0 #to keep track of complete epoch
while True:
if(count==len(df.index)):
#if the count is matching with the length of df, the one pass is completed, so reset the generator
generator.reset()
break
count+=1
data = generator.next() #get the data from the generator
#the data looks like this [[img,img] , [other_cols,other_cols]] based on the batch size
imgs = []
cols = []
targets = []
#iterate the data and append the necessary columns in the corresponding arrays
for k in range(batch_size):
imgs.append(data[0][k]) #the first array contains all images
cols.append(data[1][k][:-1]) #the second array contains all features with last column as class, so [:-1]
targets.append(data[1][k][-1]) #the last column in the second array from data is the class
yield [imgs,cols],targets #this will yield the result as you expect.
tạo chức năng tương tự cho trình tạo xác nhận của bạn. Sử dụng train_test_split để phân chia khung dữ liệu của bạn nếu bạn cần và tạo 2 trình tạo và ghi đè chúng.
truyền hàm trong model.fit_generator như thế này
model.fit_generator(my_custom_generator(),.....other params)
flow
hoặc bạn cầnflow_from_directory
? (flow
có nghĩa là bạn có thể giữ tất cả các hình ảnh được tải trong bộ nhớ)