2016-06-05 29 views
14

tôi đang cố gắng tìm hiểu một số cú pháp Keras và chơi với các Inception v3 exampleKeras | Bắt ví dụ Inception v3 chạy

Tôi có một phân loại nhiều lớp vấn đề đồ chơi 4 lớp vì vậy tôi đã thay đổi dòng sau từ ví dụ:

NB_CLASS = 4 # number of classes 
DIM_ORDERING = 'tf' # 'th' (channels, width, height) or 'tf' (width, height, channels) 

bộ dữ liệu đồ chơi của tôi có các kích thước sau:

  • Kích thước của mảng bao gồm tất cả những hình ảnh: (595 299, 299, 3)
  • Kích thước của mảng chứa hình ảnh đào tạo: (416, 299, 299, 3)
  • Kích thước của mảng chứa nhãn đào tạo: (179, 4)
  • Kích thước của mảng chứa hình ảnh thử nghiệm: (179 , 299, 299, 3)
  • Kích thước của mảng chứa các nhãn kiểm tra: (179, 4)

sau đó tôi cố gắng để đào tạo các mô hình với đoạn mã sau:

# fit the model on the batches generated by datagen.flow() 
# https://github.com/fchollet/keras/issues/1627 
# http://keras.io/models/sequential/#sequential-model-methods 
checkpointer = ModelCheckpoint(filepath="/tmp/weights.hdf5", verbose=1, save_best_only=True) 
model.fit_generator(datagen.flow(X_train, Y_train, 
       batch_size=32), 
       nb_epoch=10, 
       samples_per_epoch=32, 
       class_weight=None, #classWeights, 
       verbose=2, 
       validation_data=(X_test, Y_test), 
       callbacks=[checkpointer]) 

sau đó, Tôi gặp lỗi sau:

Exception: The model expects 2 input arrays, but only received one array. Found: array with shape (179, 4)` 

Mà có lẽ liên quan đến điều này như Inception muốn có auxiliary classifiers (Szegedy et al., 2014):

model = Model(input=img_input, output=[preds, aux_preds]) 

Làm thế nào để cung cấp cho hai nhãn để mô hình trong Keras không trở thành một lập trình viên Python tiên tiến hoặc?

+0

'ImageDataGenerator' theo mặc định sẽ xuất ra một nhãn.Bạn có thể mở rộng lớp và ghi đè hàm 'flow' để tạo ra hai kết quả đầu ra. Tùy chọn khác là thực hiện tăng thêm một cách riêng biệt và sử dụng hàm 'fit'. –

+2

Bạn đã thử 'validation_data = (X_test, [Y_test, Y_test])' –

+0

Vui lòng đăng toàn bộ mã mẫu của bạn - nếu không bạn không thể tìm thấy lỗi của mình. – FlashTek

Trả lời

0

Tôi khuyên bạn nên thử trước với this tutorial. Mã này có thể được tìm thấy here.

Bạn sẽ thấy trong phần đầu tiên của nó, nó cho thấy làm thế nào để tải dữ liệu từ một thư mục sử dụng:

.flow_from_directory(
    train_data_dir, 
    target_size=(img_width, img_height), 
    batch_size=batch_size, 
    class_mode='binary') 

Để đầu vào lớp học khác nhau, bạn sẽ phải đưa hình ảnh của bạn trong một thư mục cho mỗi class (lưu ý rằng có thể có một cách khác để thực hiện nó, bằng cách truyền các nhãn). Cũng lưu ý rằng trong trường hợp của bạn class_mode không thể sử dụng 'nhị phân' (Tôi nghĩ rằng bạn nên sử dụng 'phân loại'):

`"binary"`: binary targets (if there are only two classes), 
`"categorical"`: categorical targets, 

Sau đó, bạn có thể sử dụng mô hình inceptionv3 rằng đã có trong Keras:

from keras.applications import InceptionV3  
cnn = InceptionV3(...) 

Cũng lưu ý rằng bạn có quá vài ví dụ để đào tạo InceptionV3, như mô hình này là rất lớn (kiểm tra here kích thước). Những gì bạn có thể làm trong trường hợp này là chuyển học tập, sử dụng trọng số được đào tạo trước trên InceptionV3. Xem phần Sử dụng các tính năng nút cổ chai của mạng được đào tạo trước: độ chính xác 90% trong một phút trong the tutorial.

Các vấn đề liên quan