Làm thế nào để đào tạo dữ liệu theo lô từ đĩa?


8

Tôi đang làm việc trên một mạng lưới thần kinh tích chập để phân loại hình ảnh. Tập dữ liệu đào tạo quá lớn để được tải vào bộ nhớ máy tính của tôi (4gb), trên hết tôi cũng cần thử một số tính năng tăng cường để cân bằng các lớp.

Tôi đang sử dụng keras. Tôi đã xem xét nhiều ví dụ nhưng tôi chưa tìm ra giải pháp cho vấn đề của mình. Tôi đang suy nghĩ về việc thay thế các tham số của model.fitcuộc gọi bằng cách chuyển một hàm hoặc trình tạo thực hiện 'tạo khối'. Chức năng này tôi sẽ thiết kế để nhập từ đĩa và áp dụng tăng cường.

Tôi không có ý tưởng làm thế nào để thực hiện điều đó. Bất kỳ đề xuất?


Bạn có thể chỉ cho tôi cách lưu các tính năng đào tạo đó và các lab lab tương ứng của chúng vào đĩa để lần sau tôi không cần phải tính toán như vậy không?
Supreeth Ys

Câu trả lời:


8

Khi bạn đang làm việc phân loại hình ảnh và cũng muốn thực hiện một số gia tăng dữ liệu, bạn có thể kết hợp hai VÀ tải các lô trực tiếp từ một thư mục bằng cách sử dụng lớp 'ImageDataGenerator` hùng mạnh.

Có một cái nhìn vào các tài liệu thực thi!

Tôi sẽ không sao chép và dán ví dụ từ liên kết đó, nhưng tôi có thể phác thảo các bước bạn trải qua:

  1. tạo lớp trình tạo: data_gen = ImageDataGenerator()

  2. Nếu bạn muốn nó thực hiện việc tăng tốc nhanh chóng cho bạn, điều đó có thể được chỉ định khi tạo lớp: data_gen = ImageDataGenerator(samplewise_center=True, ...)

  3. Nếu bạn sử dụng quá trình tăng thêm rằng yêu cầu một số liệu thống kê về số liệu, ví dụ như feature_wise bình thường (không mẫu-khôn ngoan), bạn phải chuẩn bị máy phát điện bằng cách hiển thị nó một số dữ liệu của bạn: data_gen.fit(training_data). fitPhương pháp này chỉ đơn giản là tính toán trước những thứ như độ lệch trung bình và độ lệch chuẩn, sau này được sử dụng để chuẩn hóa.

  4. trình tạo đi vào fit_generatorphương thức của mô hình và chúng ta gọi flow_from_directoryphương thức của trình tạo:

    model.fit_generator(training_data=data_gen.flow_from_directory('/path/to/folder/'), ...)

Bạn cũng có thể tạo một trình tạo riêng bằng ImageDataGenerator cho dữ liệu xác thực của mình, khi đó bạn không nên áp dụng tính năng tăng cường, để các kiểm tra xác thực được thực hiện trên dữ liệu thực, cung cấp cho bạn và hình ảnh chính xác về hiệu suất của mô hình.

Trong mọi trường hợp, các trình tạo này về mặt lý thuyết sẽ chạy mãi mãi, tạo các lô từ thư mục của bạn. Do đó, tôi khuyên bạn nên sử dụng chức năng gọi lại từ Keras để dừng khi đáp ứng một tiêu chí nhất định. Xem tài liệu cho lớp EarlyStopping . Bạn cũng có thể làm điều này bằng tay, nhưng Keras làm cho nó rất đơn giản!

Nếu bạn muốn kiểm soát chi tiết, bạn có thể thực hiện tất cả các cách trên một cách thủ công, tải đủ mẫu từ đĩa cho một lô, thực hiện một số gia tăng và sau đó chạy model.train_on_batch()phương thức. Nếu bạn muốn tìm hiểu chi tiết, trước tiên bạn có thể học theo cách của Keras, sau đó tiến tới các mô hình chi tiết của riêng bạn để kết hợp với Tensorflow theo yêu cầu. Cả hai có thể được sử dụng rất độc đáo!


Tôi không hiểu bước thứ 3. Bạn có thể cho tôi biết, trong bước thứ 3 training_data nên đặt toàn bộ dữ liệu hoặc một số dữ liệu từ Tập dữ liệu không?
Junaid

@Junaid - Nó có thể là một phần nhỏ của dữ liệu. Tuy nhiên, nó cần phải đủ để tính giá trị hợp lý, ví dụ giá trị trung bình, được sử dụng sau đó cho toàn bộ tập dữ liệu trong quá trình đào tạo. Tôi đã thêm một chút thông tin vào điểm 3. Đây là một liên kết đến một ví dụ về flow_from_directoryphương pháp
n1k31t4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.