Tôi đang cố gắng hiểu vai trò của Flatten
hàm trong Keras. Dưới đây là mã của tôi, đó là một mạng hai lớp đơn giản. Nó lấy dữ liệu 2 chiều về hình dạng (3, 2) và xuất ra dữ liệu 1 chiều về hình dạng (1, 4):
model = Sequential()
model.add(Dense(16, input_shape=(3, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')
x = np.array([[[1, 2], [3, 4], [5, 6]]])
y = model.predict(x)
print y.shape
Điều này in ra y
có hình dạng (1, 4). Tuy nhiên, nếu tôi xóaFlatten
dòng, thì nó sẽ in ra y
có hình dạng (1, 3, 4).
Tôi không hiểu điều này. Từ hiểu biết của tôi về mạng nơ-ron,model.add(Dense(16, input_shape=(3, 2)))
chức năng đang tạo một lớp được kết nối đầy đủ ẩn, với 16 nút. Mỗi nút này được kết nối với mỗi phần tử đầu vào 3x2. Do đó, 16 nút ở đầu ra của lớp đầu tiên này đã "phẳng". Vì vậy, hình dạng đầu ra của lớp đầu tiên phải là (1, 16). Sau đó, lớp thứ hai lấy đây làm đầu vào và xuất dữ liệu về hình dạng (1, 4).
Vì vậy, nếu đầu ra của lớp đầu tiên đã "phẳng" và có hình dạng (1, 16), tại sao tôi cần phải làm phẳng nó hơn nữa?
Dense(16, input_shape=(5,3)
, liệu mỗi nơ-ron đầu ra từ tập 16 (và, đối với tất cả 5 bộ nơ-ron này), có được kết nối với tất cả (3 x 5 = 15) nơ-ron đầu vào không? Hay mỗi nơ-ron trong bộ 16 đầu tiên chỉ được kết nối với 3 nơ-ron trong bộ 5 nơ-ron đầu vào, và sau đó mỗi nơ-ron trong bộ 16 đầu vào chỉ được kết nối với 3 nơ-ron trong bộ 5 đầu vào thứ hai. tế bào thần kinh, vv .... Tôi bối rối không biết nó là gì!