36

Tôi muốn thiết kế một mạng lưới sâu với một (hoặc nhiều) lớp chập (CNN) và một hoặc nhiều lớp ẩn được kết nối đầy đủ ở trên cùng.
Đối với mạng sâu có các lớp được kết nối hoàn toàn, có các phương pháp trong theano để huấn luyện trước không giám sát, ví dụ: sử dụng denoising auto-encoders hoặc RBMs.Đào tạo trước khi được giám sát cho mạng nơ-ron xoắn ốc trong theano

Câu hỏi của tôi là: Làm thế nào tôi có thể thực hiện (trong theano) một giai đoạn tiền đào tạo không giám sát cho các lớp chập chững?

Tôi không mong đợi một triển khai đầy đủ như một câu trả lời, nhưng tôi sẽ đánh giá cao một liên kết đến một hướng dẫn hay một tài liệu tham khảo đáng tin cậy.

+0

Lưu ý rằng việc huấn luyện trước không giám sát hầu như không được sử dụng nữa (theo như tôi biết). – pir

+0

@pir Tôi biết. nhưng đôi khi nó vẫn có thể tiện dụng – Shai

+0

@pir: Tại sao nó hầu như không được sử dụng nữa? Có cái gì đó mới tốt hơn? – oysteijo

Trả lời

30

This paper mô tả cách tiếp cận để xây dựng bộ mã hóa tự động chuyển đổi xếp chồng lên nhau. Dựa trên giấy đó và một số tìm kiếm trên Google, tôi có thể triển khai mạng được mô tả. Về cơ bản, tất cả mọi thứ bạn cần được mô tả trong mạng convolutional Theano và denoising hướng dẫn autoencoder với một ngoại lệ rất quan trọng: làm thế nào để đảo ngược bước max-gộp trong mạng convolutional. Tôi đã có thể làm việc đó bằng cách sử dụng một phương pháp từ this discussion - phần khó nhất là tìm ra các kích thước phù hợp cho W_prime vì chúng sẽ phụ thuộc vào kích thước bộ lọc chuyển tiếp và tỷ lệ gộp. Đây là chức năng đảo ngược của tôi:

def get_reconstructed_input(self, hidden): 
     """ Computes the reconstructed input given the values of the hidden layer """ 
     repeated_conv = conv.conv2d(input = hidden, filters = self.W_prime, border_mode='full') 

     multiple_conv_out = [repeated_conv.flatten()] * np.prod(self.poolsize) 

     stacked_conv_neibs = T.stack(*multiple_conv_out).T 

     stretch_unpooling_out = neibs2images(stacked_conv_neibs, self.pl, self.x.shape) 

     rectified_linear_activation = lambda x: T.maximum(0.0, x) 
     return rectified_linear_activation(stretch_unpooling_out + self.b_prime.dimshuffle('x', 0, 'x', 'x')) 
+0

Hi senecaur - Tôi đọc bài báo nhưng tôi không thể hiểu được kiến ​​trúc của mạng. Bạn có thể cung cấp thêm chi tiết về kiến ​​trúc của mạng bạn đã sử dụng để giả vờ không? Tầng tầng lớp lớp. Và sau đó - bạn đã sử dụng cùng một mạng để finetune? tức là chỉ thay đổi lớp đầu ra từ hình ảnh thành nhãn được giám sát? Cảm ơn rất nhiều – Run2

+0

Tôi đã nêu ra một câu hỏi có liên quan trong CrossValidated http://stats.stackexchange.com/questions/137537/what-is-the-architecture-of-a-stacked-convolutional-autoencoder. Tôi sẽ biết ơn nếu senecaur - bạn có thể thả vào một câu trả lời ở đó. Cảm ơn – Run2

+0

@senecaur Nếu bạn đang sử dụng trọng lượng gắn, W_prime nên được lật phiên bản của W ban đầu (hoặc tôi sai?). Làm thế nào để bạn quản lý để tạo ra ma trận này trong ký hiệu Theano? – mmohaveri

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