Flatten layer là gì

nếu bạn đọc tài liệu của DenseNAME _ tại đây bạn sẽ thấy rằng:Dense(16, input_shape=(5,3))

sẽ dẫn đến một mạng Densevới 3 đầu vào và 16 đầu ra sẽ được áp dụng độc lập cho mỗi 5 bước. Vì vậy, nếu D(x) chuyển đổi vectơ 3 chiều thành vectơ 16 chiều, thứ bạn sẽ nhận được là đầu ra từ lớp của mình sẽ là một chuỗi các vectơ: [D(x[0,:], D(x[1,:],..., D(x[4,:]] với hình dạng (5, 16). Để có hành vi bạn chỉ định, trước tiên bạn có thể Flattenđầu vào của bạn vào một vectơ 15 ngày và sau đó áp dụng Densename__:model = Sequential() model.add(Flatten(input_shape=(3, 2))) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(4)) model.compile(loss='mean_squared_error', optimizer='SGD')

EDIT: Khi một số người đấu tranh để hiểu - ở đây bạn có một hình ảnh giải thích:

Flatten layer là gì

đọc ngắn:

Làm phẳng một tenxơ có nghĩa là loại bỏ tất cả các kích thước ngoại trừ một kích thước. Đây chính xác là những gì lớp Flatten làm.

đọc lâu:

Nếu chúng ta lấy mô hình ban đầu (với lớp Flatten) được tạo ra để xem xét, chúng ta có thể nhận được tóm tắt mô hình sau:Layer (type)                 Output Shape              Param # ================================================================= D16 (Dense)                  (None, 3, 16)             48 _________________________________________________________________ A (Activation)               (None, 3, 16)             0 _________________________________________________________________ F (Flatten)                  (None, 48)                0 _________________________________________________________________ D4 (Dense)                   (None, 4)                 196 ================================================================= Total params: 244 Trainable params: 244 Non-trainable params: 0

Đối với bản tóm tắt này, hình ảnh tiếp theo hy vọng sẽ cung cấp ít ý nghĩa hơn về kích thước đầu vào và đầu ra cho mỗi lớp.

Hình dạng đầu ra cho lớp Flatten như bạn có thể đọc là (Không, 48). Đây là mẹo. Bạn nên đọc nó (1, 48) trong thực tế. Đó là mảng 1.

Khi Tensorflow không thể suy ra hình dạng trong quá trình xây dựng biểu đồ, nó sẽ đặt giá trị thứ nguyên thành Không có, nhưng chúng ta biết đó là 1.

Vai trò của lớp Flatten trong Keras rất đơn giản:

Một hoạt động làm phẳng trên một tenxơ định hình lại tenxơ để có hình dạng bằng với số phần tử có trong tenxơ. Đây là điều tương tự như mảng 1d của các phần tử.

Trong trường hợp của bạn, nó sẽ giảm kích thước thành một số nguyên: (1, 48)

Flatten layer là gì

Bây giờ chúng ta hãy kiểm tra trường hợp thứ hai khi bạn loại bỏ lớp Flatten:Layer (type)                 Output Shape              Param # ================================================================= D16 (Dense)                  (None, 3, 16)             48 _________________________________________________________________ A (Activation)               (None, 3, 16)             0 _________________________________________________________________ D4 (Dense)                   (None, 3, 4)              68 ================================================================= Total params: 116 Trainable params: 116 Non-trainable params: 0

Flatten layer là gì

Không có lớp Flatten, sẽ không có giảm kích thước và mảng đầu vào:x = np.array([[[1, 2], [3, 4], [5, 6]]])

với hình dạng (1,3,2) sẽ xuất ra y với hình dạng (1, 3, 4).


Lưu ý: Tôi đã sử dụng phương thức model.summary() để cung cấp hình dạng đầu ra và chi tiết tham số.

Flatten layer là gì

Đây là cách Flatten hoạt động chuyển đổi Matrix thành mảng đơn.

Video liên quan