Genann là một thư viện tối thiểu, đã được thử nghiệm kỹ lưỡng để đào tạo và sử dụng các mạng thần kinh nhân tạo chuyển tiếp (ANN) trong C. Trọng tâm chính của nó là đơn giản, nhanh chóng, đáng tin cậy và có thể hack được. Nó đạt được điều này bằng cách chỉ cung cấp các chức năng cần thiết và thêm một chút Show Đặc trưng
Xây dựngGenann độc lập trong hai tệp. Mã ví dụBốn chương trình ví dụ được bao gồm trong mã nguồn
Ví dụ nhanhChúng tôi tạo một ANN lấy 2 đầu vào, có 1 lớp gồm 3 nơ-ron ẩn và cung cấp 2 đầu ra. Nó có cấu trúc như sau Sau đó, chúng tôi đào tạo nó trên một tập hợp dữ liệu được gắn nhãn bằng cách sử dụng lan truyền ngược và yêu cầu nó dự đoán trên một điểm dữ liệu thử nghiệm #include "genann.h" /* Not shown, loading your training and test data. */ double **training_data_input, **training_data_output, **test_data_input; /* New network with 2 inputs, * 1 hidden layer of 3 neurons each, * and 2 outputs. */ genann *ann = genann_init(2, 1, 3, 2); /* Learn on the training set. */ for (i = 0; i < 300; ++i) { for (j = 0; j < 100; ++j) genann_train(ann, training_data_input[j], training_data_output[j], 0.1); } /* Run the network and see what it predicts. */ double const *prediction = genann_run(ann, test_data_input[0]); printf("Output for the first test data point is: %f, %f\n", prediction[0], prediction[1]); genann_free(ann); Ví dụ này là để hiển thị cách sử dụng API, nó không hiển thị các kỹ thuật học máy tốt. Trong một ứng dụng thực tế, bạn có thể muốn tìm hiểu dữ liệu thử nghiệm theo thứ tự ngẫu nhiên. Bạn cũng muốn giám sát quá trình học để ngăn chặn quá khớp Cách sử dụngTạo và giải phóng ANNgenann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann); Việc tạo ANN mới được thực hiện bằng hàm genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);1. Các đối số của nó là số đầu vào, số lớp ẩn, số nơ ron trong mỗi lớp ẩn và số đầu ra. Nó trả về một con trỏ cấu trúc genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);2 Gọi genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);3 sẽ tạo một bản sao sâu của cấu trúc genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);2 hiện có Gọi cho genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);5 khi bạn hoàn thành ANN do genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);1 trả lại Đào tạo ANNvoid genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate); genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);7 sẽ thực hiện một lần cập nhật bằng cách sử dụng lan truyền ngược tiêu chuẩn. Nó nên được gọi bằng cách chuyển vào một mảng đầu vào, một mảng đầu ra dự kiến và tốc độ học tập. Xem ví dụ1. c để biết ví dụ về học với backpropagation Mục tiêu thiết kế chính của Genann là lưu trữ tất cả các trọng số mạng trong một khối bộ nhớ liền kề. Điều này giúp đào tạo trọng số mạng dễ dàng và hiệu quả bằng cách sử dụng các thuật toán tối ưu hóa số tìm kiếm trực tiếp, chẳng hạn như Leo đồi, Thuật toán di truyền, Luyện kim mô phỏng, v.v. Các phương pháp này có thể được sử dụng bằng cách tìm kiếm trực tiếp trọng số của ANN. Mỗi cấu trúc genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);2 chứa các thành viên genann *genann_init(int inputs, int hidden_layers, int hidden, int outputs); genann *genann_copy(genann const *ann); void genann_free(genann *ann);9 và void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);0. void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);1 trỏ đến một mảng có kích thước void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);2 chứa tất cả các trọng số được sử dụng bởi ANN. Xem ví dụ2. c để biết ví dụ về đào tạo sử dụng tìm kiếm leo đồi ngẫu nhiên Lưu và tải ANNgenann *genann_read(FILE *in); void genann_write(genann const *ann, FILE *out); Genann cung cấp các hàm void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);3 và void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);4 để tải hoặc lưu ANN ở định dạng dựa trên văn bản đánh giádouble const *genann_run(genann const *ann, double const *inputs); Gọi void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);5 trên ANN được đào tạo để chạy chuyển tiếp nguồn cấp dữ liệu trên một tập hợp đầu vào nhất định. void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);5 sẽ cung cấp một con trỏ tới mảng đầu ra dự đoán (có độ dài void genann_train(genann const *ann, double const *inputs, double const *desired_outputs, double learning_rate);7) gợi ý
Tài nguyên bổ sungmáy tính. ai. Câu hỏi thường gặp về mạng nơ-ron là một tài nguyên tuyệt vời để giới thiệu về mạng nơ-ron nhân tạo Nếu bạn cần một thư viện mạng thần kinh thậm chí còn nhỏ hơn, hãy xem thư viện một lớp ẩn tuyệt vời tinn Nếu bạn đang tìm kiếm một thư viện mạng nơ-ron nặng hơn, cố chấp hơn trong C, tôi khuyên dùng thư viện FANN. Một thư viện tốt khác là Mạng nơ-ron nhẹ của Peter van Rossum, mặc dù tên của nó nặng hơn và có nhiều tính năng hơn Genann Bạn có thể tạo một mạng lưới thần kinh trong C không?Là một phần trong quá trình tìm hiểu sâu hơn về các khái niệm máy học, tôi quyết định viết một mạng thần kinh đơn giản từ đầu bằng C mà không cần sự trợ giúp của bất kỳ thư viện ma trận hoặc vectơ nào.
3 loại mạng lưới thần kinh khác nhau là gì?Mạng nơ-ron nhân tạo (ANN) Mạng nơ-ron tích chập (CNN) Mạng nơ-ron tái phát (RNN)
Mạng lưới thần kinh trong CS là gì?Mạng nơ-ron là một phương pháp trong trí tuệ nhân tạo dạy máy tính xử lý dữ liệu theo cách lấy cảm hứng từ bộ não con người . Đó là một loại quy trình học máy, được gọi là học sâu, sử dụng các nút hoặc tế bào thần kinh được kết nối với nhau trong một cấu trúc phân lớp giống như bộ não con người.
Chúng ta có thể viết mã máy học bằng C không?Nó giúp các lập trình viên chạy các thuật toán một cách nhanh chóng. Có rất nhiều thư viện hiện diện trong lĩnh vực học máy và học sâu, giúp các nhà nghiên cứu dễ tiếp cận hơn khi làm việc với các dự án phức tạp. Trong bài viết này, chúng tôi liệt kê 10 thư viện hàng đầu trong C và C++ cho máy học |