Vì vậy, tôi đang cố gắng triển khai this giấy về mạng thần kinh Xiêm: Tìm hiểu một số liệu tương tự một cách phân biệt, với ứng dụng đối mặt với xác minh, bởi Sumit Chopra, Raia Hadsell và Yann LeCun (2005) . Tôi đang sử dụng các CIFAR10 dataset thay vào đó, mặc dù, với 10 lớp học.Thực hiện một Xiêm NN trong Keras
Thông số kỹ thuật của một trong hai chân được sao chép để thuận tiện. Ký hiệu: C_x là một lớp convolution, S_x là một lớp lớp con và F_x là một lớp được kết nối hoàn toàn; với một chỉ số chung x:
- C1: bản đồ tính năng: 15, kernel size = (7, 7)
- S2: Tính năng bản đồ: 15, lĩnh vực-of-view = (2, 2)
- C3: bản đồ tính năng: 45, kích thước hạt nhân = (6, 6)
- S4: bản đồ tính năng: 45, trường xem = (4, 3)
- C5: bản đồ tính năng: 250, kích thước hạt nhân = (5, 5)
- F6 (lớp được kết nối hoàn toàn): không. các đơn vị = 50
Những gì tôi đã cố gắng
model = Sequential()
#C1
model.add(Convolution2D(15, 7, 7,
activation='relu',
border_mode='same',
input_shape=input_img_shape))
print("C1 shape: ", model.output_shape)
#S2
model.add(MaxPooling2D((2,2), border_mode='same'))
print("S2 shape: ", model.output_shape)
#...
#C5
model.add(Convolution2D(250, 5, 5,
activation='relu',
border_mode='same'))
print("C5 shape: ", model.output_shape)
#F6
model.add(Dense(50))
này ném một thông báo lỗi dài, mà tôi tin là một lỗi Reshape. Một đoạn trích của lỗi:
Exception: Input 0 is incompatible with layer dense_13: expected
ndim=2, found ndim=4
Tôi biết rằng vấn đề được phân lập trong lớp dày đặc cuối cùng đó, vì mã này tiến hành suôn sẻ nếu tôi nhận xét. Nhưng tôi không chắc chắn chính xác làm thế nào tôi nên sau đó hình/xác định cuối cùng của tôi hoàn toàn kết nối lớp để nó tương thích với các lớp convolution trước?
Một số Nơi tôi đã Nhìn
This là một vấn đề có liên quan, mặc dù việc thực hiện là hơi khác nhau (có vẻ như không có một lớp lõi 'Xiêm' trong keras tại thời điểm viết bài này). Tôi biết rằng cũng có implementations in Theano, mà tôi sẽ nhớ nếu tôi không thể làm điều đó trong keras.
Cảm ơn!
Về mặt khái niệm, tôi có thể hỏi tại sao bạn cần một lớp "phẳng" không? Điều này là mới đối với tôi bởi vì tôi đã không nhìn thấy nó được đề cập trong bài báo. Cảm ơn! – AndreyIto
@AndreyIđây là chi tiết thực hiện hơn: Trong Keras, đầu ra của lớp 'Convolution2D' có 4 kích thước [(xem nguồn)] (https://github.com/fchollet/keras/blob/master/keras/layers /convolutional.py#L248) trong khi đầu vào của lớp 'Dense' phải có kích thước 2 [(xem nguồn)] (https://github.com/fchollet/keras/blob/master/keras/layers/core.py # L567). Vì vậy, bạn cần phải san bằng dữ liệu của bạn với lớp 'Flatten' trước khi chuyển nó qua lớp 'Dense'. – sytrus