6

Tôi có câu hỏi về việc sử dụng Keras mà tôi khá mới. Tôi đang sử dụng một mạng neural convolutional mà nguồn cấp dữ liệu của nó kết quả vào một lớp perceptron tiêu chuẩn, mà tạo ra đầu ra của tôi. CNN này được cho ăn với một loạt các hình ảnh. Điều này cho đến nay khá bình thường.Keras: Cách nạp trực tiếp đầu vào vào các lớp ẩn của mạng thần kinh khác so với đầu tiên?

Bây giờ tôi muốn truyền trực tiếp một vector đầu vào không hình ảnh ngắn vào lớp perceptron cuối cùng mà không gửi nó qua tất cả các lớp CNN. Làm thế nào điều này có thể được thực hiện trong Keras?

Mã của tôi trông như thế này:

# last CNN layer before perceptron layer 
model.add(Convolution2D(200, 2, 2, border_mode='same')) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 
model.add(Dropout(0.25)) 

# perceptron layer 
model.add(Flatten()) 

# here I like to add to the input from the CNN an additional vector directly 

model.add(Dense(1500, W_regularizer=l2(1e-3))) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

Bất kỳ câu trả lời được đánh giá cao rất nhiều, cảm ơn!

Trả lời

3

Cung cấp phụ trợ của Keras của bạn là Theano, bạn có thể làm như sau:

import theano 
import numpy as np 

d = Dense(1500, W_regularizer=l2(1e-3), activation='relu') # I've joined activation and dense layers, based on assumption you might be interested in post-activation values 
model.add(d) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

c = theano.function([d.get_input(train=False)], d.get_output(train=False)) 
layer_input_data = np.random.random((1,20000)).astype('float32') # refer to d.input_shape to get proper dimensions of layer's input, in my case it was (None, 20000) 
o = c(layer_input_data) 
+0

Nhờ sự giúp đỡ của bạn, Serj. Tôi nghĩ bây giờ tôi hiểu khái niệm. –

5

Bạn không hiển thị mà loại mô hình mà bạn đang sử dụng, nhưng tôi giả định rằng bạn khởi tạo mô hình của bạn như tuần tự . Trong một mô hình tuần tự bạn chỉ có thể xếp chồng lên nhau một lớp - vì vậy việc thêm kết nối "cắt ngắn" là không thể.

Vì lý do này, tác giả của Keras đã thêm tùy chọn xây dựng mô hình "biểu đồ". Trong trường hợp này, bạn có thể xây dựng một đồ thị (DAG) của các tính toán của bạn. Đó là một phức tạp hơn việc thiết kế một chồng các lớp, nhưng vẫn còn khá dễ dàng.

Kiểm tra các trang web tài liệu hướng dẫn để tìm kiếm thêm thông tin chi tiết: http://keras.io/models/#using-the-graph-model

+0

Ồ, tôi hiểu rồi. Vâng, tôi thực sự đã sử dụng thiết lập 'tuần tự'. Cảm ơn sự giúp đỡ của bạn và liên kết! –

0

Câu trả lời here công trình là cấp cao hơn và cũng làm việc cho tensorflow backend:

input_1 = Input(input_shape) 
input_2 = Input(input_shape) 

merge = merge([input_1, input_2], mode="concat") # could also to "sum", "dot", etc. 
hidden = Dense(hidden_dims)(merge) 
classify = Dense(output_dims, activation="softmax")(hidden) 

model = Model(input=[input_1, input_2], output=hidden) 
Các vấn đề liên quan