Brain.js là một cách tuyệt vời để xây dựng một mạng lưới thần kinh. Nói một cách đơn giản, một mạng lưới thần kinh là một phương pháp học máy hoạt động theo cách tương tự với bộ não con người. Đưa ra câu trả lời đúng cho một câu hỏi (như 'Người dùng nào người dùng này sẽ chọn loại nào?'), Nó từ từ tìm hiểu mô hình và mối quan hệ giữa các đầu vào và câu trả lời. Một ví dụ về một mạng lưới thần kinh là hệ thống nhận dạng khuôn mặt của Facebook, Deepface.
Nhưng do ngôn ngữ miền phức tạp của các mạng thần kinh và đường cong học tập có vẻ dốc, có thể khó bắt đầu.
Trong hướng dẫn này, chúng tôi sẽ chưng cất lý thuyết xuống cần phải biết và quan trọng, bị mắc kẹt với thực sự sử dụng Brain.js để tạo một mạng lưới thần kinh. Cuối cùng, bạn sẽ có một ứng dụng web yêu cầu các câu hỏi trắc nghiệm về sự lạc quan của người dùng. Khi họ gửi, những câu trả lời này sẽ đào tạo một mạng lưới thần kinh về xác suất người dùng của chúng tôi chọn từng tùy chọn cho một câu hỏi hoàn toàn mới.
Muốn có nhiều công cụ thiết kế web hữu ích hơn? Xem bài viết của chúng tôi về chọn hoàn hảo người tạo ra trang web . Hoặc nếu bạn cần một nơi nào đó để lưu trữ các tập tin một cách an toàn, hãy xem lựa chọn tốt nhất của chúng tôi lưu trữ đám mây . Có kế hoạch một trang web phức tạp? Bạn sẽ cần một sự mạnh mẽ web hosting dịch vụ, có thể theo kịp.
Tải về các tập tin bạn sẽ cần cho hướng dẫn này.
Thứ nhất, tải về và cài đặt các phụ thuộc cần thiết. Hướng dẫn này cho rằng bạn có một kiến thức làm việc về phản ứng, hoặc ánh xạ tương đương với một sự thay thế ưu tiên.
Tạo một ứng dụng phản ứng bằng phương pháp mong muốn của bạn. Bạn có thể thử Facebook Tạo-React-App Công cụ, được cài đặt bằng cách sử dụng như sau:
npm install create-react-app -g
Bây giờ chúng ta có thể xây dựng, cài đặt Brain.js và bắt đầu ứng dụng của chúng tôi:
NPX CREATE-React-App Optimism-NN
CD lạc quan-nn
NPM cài đặt BrainJs.
NPM bắt đầu
Chúng tôi sẽ thực hiện tính toán mạng lưới thần kinh trên trình duyệt. Mạng thần kinh là tài nguyên chuyên sâu và nên được giảm tải cho một máy chủ. Tuy nhiên, cách này nhanh chóng được thiết lập và tốt cho các nhu cầu cơ bản của chúng tôi. Bây giờ hãy thêm Brain.js vào điểm vào của chúng tôi (trong trường hợp của tôi, App.js).
Nhập khẩu bộ não từ 'Brain.js';
Chúng tôi cần xác định các câu hỏi đào tạo của chúng tôi tiếp theo. Trong một riêng biệt câu hỏi.js. tập tin, chúng ta sẽ cần một đào tạo đúng và Xác thựcQuestions. mảng. Bạn có thể tìm thấy danh sách của mình trên git repo hoặc tạo của riêng bạn. Bạn càng có nhiều câu hỏi đào tạo, kết quả của bạn càng chính xác. Hãy nhớ nhập những thứ này vào điểm vào của bạn.
Xuất CST Đào tạoQuestions = [
Đồn là
ID: 'Q1',
Câu hỏi: 'Bạn có thường thấy điều tốt nhất trong mọi thứ không?',
Tùy chọn: [
{id: 'q1a', nhãn: 'không thực sự', giá trị: 0,2,},
{id: 'q1b', nhãn: 'luôn luôn', giá trị: 1.0,},
{id: 'q1c', nhãn: 'thường, yeah', giá trị: 0,7,},
{id: 'q1d', nhãn: 'không bao giờ!', giá trị: 0,0,},
],
},
];
Đối với cả hai mảng, chúng ta cần một câu hỏi, một mảng gồm bốn tùy chọn có chứa nhãn và giá trị lạc quan. Giá trị này sẽ là đầu vào cho mạng thần kinh của chúng tôi.
Đảm bảo bạn thay đổi thứ tự và số dư của các giá trị hoặc mạng thần kinh có thể tập trung quá nhiều vào chỉ mục của các tùy chọn trong mảng! Mạng thần kinh của chúng tôi mất bốn đầu vào và cho bốn đầu ra. Dữ liệu đào tạo của chúng tôi cần phải khớp với điều này, vì vậy trong hàm tạo của chúng tôi, chúng tôi cần một số trạng thái cho bài kiểm tra và các tùy chọn của người dùng:
that.state = {
Đào tạo: Đào tạoQuestions.map (() = & gt; mảng (4). Điền (0)),
Đào tạo: Sai,
Dự đoán: không xác định,
};
Việc khởi tạo các trình đào tạo tạo ra một mảng cho mỗi câu hỏi chứa [0, 0, 0, 0] - trạng thái mặc định của chúng tôi không có lựa chọn. Chúng tôi cũng sẽ cần khởi tạo mạng lưới thần kinh của chúng tôi - chỉ là một dòng duy nhất với Brain.js:
This.Net = New Brain.NeuralNetwork ({hiddenlayers: });
Để xây dựng khung cho bài kiểm tra của chúng tôi, chúng tôi cần lặp lại các câu hỏi và lựa chọn đào tạo của chúng tôi. Điều này khá dài dòng và không thú vị lắm, vì vậy tôi sẽ đưa ra một đầu ra ví dụ để bạn nhắm đến thay vào đó:
Render () {
trở về (
& lt; main & gt;
& lt; biểu mẫu onsubmit = {this.onsubmit} & gt;
[. . .] // lặp đi lặp lại các câu hỏi & amp; Tùy chọn
& lt; div classname = "Câu hỏi" & gt;
& lt; h4 & gt; {câu hỏi} & lt; / h4 & gt;
& lt; div classname = "Tùy chọn" & gt;
& lt; nhãn HTMLFOR = {tùy chọn} & gt;
& lt; span & gt; {nhãn} & lt; / span & gt;
& lt; đầu vào
gõ = "radio"
cần thiết
Tên = {adsid}
id = {tùy chọn}
Đã kiểm tra = {() = & gt; this.IsoptionChecked (addensex, tùy chọnindex)}
onchange = {() = & gt; this.OnPtionChange (addensex, Tùy chọn Index)}
/ & gt;
& lt; / nhãn & gt;
[. . .]
& lt; / div & gt;
& lt; / div & gt;
[. . .]
& lt; nút nút = "Gửi" & gt; gửi & lt; / nút & gt;
& lt; / form & gt;
& lt; / main & gt;
);
Không thể
Nếu bạn mới phản ứng, hãy xem tài liệu cho các hình thức xây dựng.
Chúng ta có thể viết isoptionchecked. và onoptionchange. Chức năng Tiếp theo:
isoptionchecked = (addensex, tùy chọnindex) = & gt; (
this.state.traininganswers [addindex] [Tùy chọn IndIndex]! == 0
);
OnOptionChange = (addindex, Tùy chọn IndIndex) = & GT; Đồn là
this.setstate (Prevstate = & GT; {
const {đào tạo} = object.assign (PRECTSTATE, {});
đào tạo [câu hỏi] = mảng (4). Điền (0);
đào tạo [câu hỏi] [Tùy chọnindex] = 1;
trả lại {đào tạo};
});
};
Bây giờ, khi người dùng của chúng tôi nhấp vào tùy chọn, chúng tôi cập nhật liên quan đào tạo mảng để có một 1. Trong chỉ mục đã chọn và thay đổi trạng thái của nút radio để hiển thị nó như đã chọn.
Thời gian để thêm của chúng tôi onsubmit. Chức năng, nơi chúng tôi xây dựng dữ liệu đào tạo và đào tạo mạng lưới thần kinh:
onsubmit = e = & gt; Đồn là
e.preventdefault ();
const {đào tạo} = this.state;
Const đào tạoData = đào tạoQuestion.map ((q, i) = & gt; ({
Đầu vào: Q.Options.map (O = & GT; o.Value),
Đầu ra: Đào tạo [I],
}));
this.setstate ({
Đào tạo: Đúng,
});
this.net.trainaSync (đào tạo)
.Then (res = & gt; {
Console.log (res); // đăng nhập tỷ lệ lỗi và # lặp lại
Điều này .GetPredictions ()
});
}
Lặp lại đào tạo đúng , Chúng tôi tạo các mảng đầu vào và đầu ra mà chúng ta cần. Chúng tôi nhận được dữ liệu đầu vào bằng cách lấy giá trị lạc quan của từng tùy chọn và chúng tôi nhận được dữ liệu đầu ra từ việc tìm kiếm trong đào tạo mảng tại cùng một chỉ mục với câu hỏi.
Sau đó, chúng tôi cập nhật trạng thái với Đào tạo: Đúng. Để thông báo cho người dùng rằng mạng lưới thần kinh đang học. Tùy thuộc vào sức mạnh xử lý của thiết bị khách và bạn có bao nhiêu câu hỏi, quá trình có thể mất vài giây, phút hoặc lâu hơn!
Cuối cùng, chúng tôi chuyển dữ liệu đào tạo cho mạng lưới thần kinh của chúng tôi và bảo nó đào tạo không đồng bộ. Điều này trả về một lời hứa được thực hiện khi mạng đã tìm thấy mô hình hoặc từ bỏ.
Theo dõi tỷ lệ lỗi chúng tôi đăng nhập Trainasync. . Lý tưởng nhất là nó phải nằm trong khoảng từ 0 - 0,05. Nếu nó cao hơn, hãy kiểm tra dữ liệu đào tạo của bạn.
Từ đó, chúng ta có thể có được dự đoán của chúng tôi:
GetPredictions = () = & GT; Đồn là
dự đoán const = xác thựcQuestions.map (q = & gt; (
this.net.run (q.Options.map (o = & gt; o.value))
));
this.setstate ({
Đào tạo: Sai,
phỏng đoán,
});
Không thể
Sử dụng net.run. , Chúng tôi yêu cầu mạng lưới thần kinh mới được đào tạo của chúng tôi cung cấp cho chúng tôi dự đoán của mình cho mỗi câu hỏi xác nhận mà chúng tôi đã xác định trước đó.
Đối với Grand Finale, chúng tôi thêm logic tải có điều kiện của chúng tôi và trình bày một phát hiện cho người dùng.
render () {
const {đào tạo, dự đoán} = this.state;
Const xác nhậnQuestion = xác thựcQuestion ;
trở về (
& lt; main & gt;
{Đào tạo & amp; & amp; (
& lt; H2 & GT; Đang tải ... & LT; / H2 & GT;
)}
{! Dự đoán & amp; & amp; ! Đào tạo & amp; & amp; (
[. . .] // Mẫu câu hỏi đào tạo
)}
{Dự đoán & amp; & amp; ! Đào tạo & amp; & amp; (
& lt; div & gt;
& lt; h2 & gt; chúng tôi đã yêu cầu mạng lưới thần kinh: & lt; / h2 & gt;
& lt; div classname = "Câu hỏi" & gt;
& lt; h4 & gt; {xác thựcQuestion.Question} & lt; / h4 & gt;
& lt; div classname = "Tùy chọn" & gt;
{xác thựcQuestion.options.map ((o, i) = & gt; (
& lt; khóa nhãn = {o.id} & gt;
{/ * Hiển thị nhãn và xác suất dưới dạng tỷ lệ phần trăm vòng * /}
& lt; span & gt; {$ {o.label}: $ {math.round (dự đoán [i] * 100)}%} & lt; / span & gt;
& lt; / nhãn & gt;
))}
& lt; / div & gt;
& lt; / div & gt;
& lt; / div & gt;
)}
& lt; / main & gt;
);
Không thể
Không thể
Bây giờ bạn có khung cơ bản cho bài kiểm tra, hãy thử mở rộng nó với các mục sau:
Tìm tỷ lệ lỗi thực của mạng lưới thần kinh của bạn bằng cách để người dùng của bạn trả lời các câu hỏi xác thực của bạn. Xem bao nhiêu lần họ chọn dự đoán tốt nhất của bạn.
Đào tạo mạng lưới thần kinh với những câu trả lời bổ sung này và xem nếu bạn có thể cải thiện độ chính xác.
Di chuyển các tính toán mạng thần kinh trên máy chủ nút với Brain.js Đáng chú ý () và tojson () phương pháp.
Bài viết này ban đầu xuất hiện trong vấn đề 321 trong Tạp chí Net. , Tạp chí thiết kế web hàng đầu thế giới. Mua số 321. hoặc là Đăng ký mạng lưới .
Đọc thêm:
[số 8] (Tín dụng hình ảnh: Steve Goad) Bắt đầu với Artrage 01. Đư�..
[số 8] Tạo các ứng dụng đối mặt với trình duyệt với Node.js bị tẻ nhạt. Express.js. là ..
[số 8] Trong những năm đầu của sự nghiệp minh họa của tôi, tôi đã tha thứ từ việc phải minh họa c�..
[số 8] Việc sử dụng đèn vòm là một trong những tiến bộ lớn nhất trong CGI Creation trong thập kỷ qua. ..
[số 8] Lượt xem ngoạn mục, Skylines tuyệt đẹp và cảnh quan đẹp xinh đẹp tạo ra những bức ảnh tuyệ..
[số 8] Các nhà thờ thời trung cổ, đồng cỏ xanh và những ngôi nhà trang trại đá phiến có đồng nghĩa ..
[số 8] Khi được yêu cầu thực hiện một hội thảo về việc tạo ra một môi trường giả tưởng, tôi n..
[số 8] Năm vừa qua này đã là một người thay đổi trò chơi cho ngành công nghiệp trò chơi điện tử và ..