Làm cách nào tôi có thể làm cho mạng của mình xử lý các vòng quay của đầu vào như nhau?


11

Tôi đang cố gắng lập trình hệ thống của riêng tôi để chạy một mạng thần kinh. Để giảm số lượng nút cần thiết, nó đã được đề xuất để làm cho nó xử lý các vòng quay của đầu vào như nhau.

Mạng của tôi nhằm mục đích tìm hiểu và dự đoán Trò chơi cuộc sống của Conway bằng cách nhìn vào mọi ô vuông và các ô vuông xung quanh trong một lưới và đưa ra kết quả cho ô vuông đó. Đầu vào của nó là một chuỗi gồm 9 bit:

Tàu lượn

Trên đây được đại diện là 010 001 111.

Tuy nhiên, có ba phép quay khác của hình dạng này và tất cả chúng đều tạo ra cùng một đầu ra:

Xoay tàu lượn

Cấu trúc liên kết mạng của tôi là 9 nút đầu vào và 1 nút đầu ra cho trạng thái tiếp theo của hình vuông trung tâm trong đầu vào. Làm thế nào tôi có thể xây dựng (các) lớp ẩn để chúng lấy mỗi phép quay này như nhau, cắt giảm số lượng đầu vào có thể xuống còn một phần tư ban đầu?

Biên tập:

Ngoài ra còn có một lần lật của mỗi vòng quay tạo ra một kết quả giống hệt nhau. Kết hợp những thứ này sẽ cắt đầu vào của tôi bằng 1/8. Với tàu lượn, mục tiêu của tôi là cho tất cả các đầu vào này được xử lý giống hệt nhau. Điều này sẽ phải được thực hiện với tiền xử lý, hoặc tôi có thể kết hợp nó vào mạng không?


Câu hỏi nổi bật! Tôi có một vấn đề tương tự, cản trở với dự án của riêng tôi và sẽ rất quan tâm để tìm hiểu về các kỹ thuật hiệu quả nhất để giảm đối xứng.
DukeZhou

@DukeZhou Tôi có ấn tượng rằng sẽ mất một lúc để có câu trả lời. Tôi đã sẵn sàng sử dụng hết nguồn cung cấp ít ỏi của mình để thiết lập tiền thưởng nếu cần ...
Aric

Một giải pháp khác là xử lý trước đầu vào, sao cho cả 4 phép quay được chuyển đổi thành cùng một hình ảnh trước khi được đưa vào mạng.
BlueMoon93

Câu trả lời:


4

Nếu tôi hiểu rõ nút đầu ra duy nhất của bạn sẽ là trạng thái tiếp theo của hình vuông ở giữa. Bạn không cần phải lo lắng về số lượng nút trong các lớp ẩn trong khi bạn có đủ tài nguyên để đào tạo mô hình. Vấn đề này rất dễ học đối với một mạng lưới thần kinh nên không có mối quan tâm về kích thước.

Bạn cần thực hiện đào tạo có giám sát có nghĩa là bạn cần cung cấp dữ liệu đầu vào và đầu ra dự kiến ​​phù hợp. Bạn cần chắc chắn rằng trong dữ liệu đào tạo của bạn, tất cả 4 phép quay được gán cho cùng một đầu ra. Bằng cách này, mạng của bạn sẽ học cách đối xử với tất cả những điều này theo cùng một cách.

Bạn làm tôi tò mò nên tôi đã thử. Giải pháp của tôi có thể học đúng 100% trong khoảng 20 epoch chạy trong vài giây trên máy tính xách tay cũ của tôi. Tôi chỉ thay đổi một chút đầu ra để được phân loại [0,1] hoặc [1,0] nhưng điều đó cho kết quả tương tự mà bạn đang tìm kiếm. Chỉ để tham khảo ở đây là mã được viết bằng python:

from keras.models import Sequential
from keras.layers import Input, Dense
from keras.models import Model
from keras import optimizers
from keras.utils.np_utils import to_categorical
import helper

x_,y_ = helper.fnn_csv_toXY("conway.csv","output",False)
y_binary = to_categorical(y_)

model = Sequential()
model.add(Dense(100, activation='relu', kernel_initializer='glorot_uniform',input_shape =(9,)))
model.add(Dense(20, activation='relu', kernel_initializer='glorot_uniform'))
model.add(Dense(2, activation='softmax'))
adam=optimizers.Adam()
model.compile(optimizer=adam,
              loss='categorical_crossentropy',
              metrics=['acc'])
model.fit(x_, y_binary, epochs=100)

Mạng tôi sẽ sử dụng sẽ được mô phỏng bởi một lớp do chính tôi viết, do đó liên quan đến bộ nhớ.
Aric

Nếu bạn muốn giảm mức sử dụng bộ nhớ của mạng thì việc giảm số lượng đầu vào có thể (bằng cách xoay) sẽ giúp có một mạng nhỏ hơn. Nhiệm vụ học tập càng dễ dàng là mạng nhỏ hơn cần thiết. Trong trường hợp này tiền xử lý sẽ tốt hơn. Tuy nhiên, NN là để học khái niệm và để tìm hiểu khái niệm Trò chơi cuộc sống, bạn nên cung cấp tất cả các mẫu. Nếu mục đích của bạn là giảm thiểu tối đa dấu chân bộ nhớ, hãy giải quyết vấn đề theo cách tuyến tính.
Manngo

Nếu bộ nhớ không phải là vấn đề đáng lo ngại, tôi muốn mạng thực hiện thao tác này vì những lý do tương tự như bạn đã nêu. Xử lý trước loại bỏ một số tác vụ khỏi mạng, đơn giản hóa nó.
Aric

Đúng, sau đó đi xử lý trước. Tôi nghĩ với câu hỏi này đã được trả lời. Bạn có thể chọn thực hiện nó nếu bạn gặp vấn đề với bộ nhớ. Mẹo: sử dụng float cho các trọng số chỉ mất 32 bit thay vì gấp đôi mất 64. Điều này sẽ sử dụng ít bộ nhớ hơn.
Manngo

4

Bạn đã xác định được một tối ưu hóa trong không gian vấn đề của bạn và mong muốn nướng nó vào mạng lưới thần kinh của bạn. Tôi đề nghị tiền xử lý: Soạn tối ưu hóa của bạn với một mạng lưới thần kinh thực hiện một tập hợp con của những gì bạn muốn.

Nói cách khác, bình thường hóa đầu vào của bạn bằng cách mã hóa thủ công thuật toán xoay để xoay đầu vào để nắm bắt sự tương đương được tô sáng trong bài đăng của bạn. Sau đó cung cấp đầu ra của chuyển đổi này vào mạng lưới thần kinh của bạn, để đào tạo và tất cả các sử dụng khác. Điều này có nghĩa là bạn đang đào tạo mạng lưới thần kinh để giải quyết vấn đề phụ mà bạn đã xác định - các phép quay là dư thừa.

Kiểm tra trình chuẩn hóa của bạn bằng cách tạo đầu vào ngẫu nhiên, xoay nó đến tất cả bốn biến đổi tiềm năng, chạy trình chuẩn hóa trên mỗi biến đổi, sau đó kiểm tra xem tất cả chúng có tương đương không.


1

Để hoàn toàn rõ ràng về nó, hãy bắt đầu bằng cách xem xét đầu vào khác nhau, như một mảng tròn có kích thước bốn, mỗi mục chứa một cặp bit và thêm vào đó là một bit trung tâm:

... 01, 01, 11, 10 ...

0

Trong suốt thiết kế của mạng, tiếp tục cấu trúc vòng tròn này và mô hình điểm trung tâm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.