- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
上下文:Tôi sử dụng Eigen cho các mạng thần kinh nhân tạo có kích thước điển hình là khoảng 1000 nút mỗi lớp. Vì vậy, hầu hết thao tác là chuyển đổi ma trận có kích thước ~(1000,1000) M
Nhân với vectơ có kích thước 1000 hoặc một loạt vectơ B,Biểu diễn dưới dạng ma trậnKích thước Bx1000.
Sau khi huấn luyện mạng nơ-ron, tôi sử dụng tính năng cắt tỉa - một kỹ thuật nén phổ biến và kết thúc bằng một ma trận thưa thớt (mật độ các tham số không trống từ 10% đến 50%).
Mục tiêu:Tôi muốn sử dụng ma trận thưa để nén và thứ hai là để tối ưu hóa hiệu suất, nhưng đó không phải là mục tiêu chính
câu hỏi: Tôi đang so sánh hiệu suất của phép nhân ma trận thưa và phép nhân ma trận dày đặc (chỉ tính thời gian nhân) cho các kích cỡ lô khác nhau và tôi đang quan sát những điều sau (sử dụng Eigen 3.2.8, MacBook Pro 64-bit, không có open_mp, và sử dụng tiêu chuẩn g++):
Thời gian nhân MxN (ms) cho M thưa/dày đặc và N có kích thước 1000xB
mã số:Tôi sử dụng các loại sau cho ma trận thưa thớt và dày đặc:
typedef SparseMatrix spMatFloat;
Ma trận typedef deMatRowFloat;
Những gì tôi muốn điểm chuẩn như sau:
o.noalias()=m*in.transpose();
其中 o
là một ma trận dày đặc (1000xB),m
là một ma trận dày đặc (1000x1000) hoặc bằng m.sparseView( )
,而TRONG
là một ma trận dày đặc (Bx1000)
Mã hoàn chỉnh như sau (Thời gian trung bình cho 20 ma trận ngẫu nhiên khác nhau, mỗi phép tính nhân 50) - Thời gian của B=32 và B=1 như sau.
Mọi phản hồi/cảm giác chân thành đều được chào đón!
đợt 1 tỷ lệ 0,3 dày đặc 0,32 thưa thớt 0,29
đợt 32 tỷ lệ 0,3 dày đặc 2,75 thưa thớt 15,01
#include
#include
#include
#include
sử dụng không gian tên Eigen;
sử dụng không gian tên boost::timer;
typedef SparseMatrix spMatFloat;
Ma trận typedef deMatRowFloat;
void bench_Sparse(const spMatFloat &m, const deMatRowFloat &in, deMatRowFloat &o) {
o.noalias()=m*in.transpose();
}
void bench_Dense(const deMatRowFloat &m, const deMatRowFloat &in, deMatRowFloat &o) {
o.noalias()=m*in.transpose();
}
int main(int argc, const char **argv) {
tỷ lệ thả nổi = 0,3;
int iter=20;
lô int=32;
float t_dense=0;
float t_sparse=0;
deMatRowFloat d_o1(batch,1000);
deMatRowFloat d_o2(batch,1000);
for(int k=0; k
deMatRowFloat d_m=deMatRowFloat::Zero(1000,1000);
deMatRowFloat d_b=deMatRowFloat::Random(batch,1000);
for(int h=0;h
int i=Rand()%1000;
int j=Rand()%1000;
d_m(i,j)=(Rand()%1000)/500.-1;
}
spMatFloat s_m=d_m.sparseView();
{
bộ đếm thời gian cpu_timer;
for(int k=0;k<50;k++) bench_Dense(d_m,d_b,d_o1);
cpu_times const elapsed_times(timer.elapsed());
nanosecond_type const đã trôi qua(elapsed_times.system+elapsed_times.user);
t_dense+=đã trôi qua/1000000.;
}
{
bộ đếm thời gian cpu_timer;
for(int k=0;k<50;k++) bench_Sparse(s_m,d_b,d_o2);
cpu_times const elapsed_times(timer.elapsed());
nanosecond_type const đã trôi qua(elapsed_times.system+elapsed_times.user);
t_sparse+=đã trôi qua/1000000.;
}
}
std::cout<<"batch\t"<<><> <>
}
Kết quả mới sau khi ggael đề xuất:Tôi đã thử các cách kết hợp khác nhau và nhận thấy rằng khi thay đổi M
Và B
Thực sự có sự khác biệt lớn về hiệu suất khi RowMajor/Column.
Tóm lại, tôi M*B
quan tâm đến cái nào M
là (1000,1000) và B
is(1000,batch): Tôi quan tâm đến việc so sánh hiệu suất của M thưa/dày đặc và khi lô tăng lên.
Tôi đã thử nghiệm 3 cấu hình:
Kết quả như sau - trong đó số là tỷ lệ thời gian trên mỗi cột của B=32/lần đối với B=1 với ma trận M có mật độ 0,3:
Các vấn đề được báo cáo ban đầu là trường hợp xấu nhất (M ColMajor, B RowMajor). Đối với (M RowMajor, B ColMajor), có tốc độ tăng gấp 5 lần giữa B=32 và B=1 và hiệu suất của ma trận thưa thớt gần như tương đương với hiệu suất của ma trận dày đặc.
câu trả lời hay nhất
Trong Eigen, các sản phẩm vectơ ma trận và ma trận được tối ưu hóa cao cho đại số dày đặc và tận dụng tối đa lợi thế của vectơ hóa. Như bạn có thể thấy, tích ma trận mang lại hiệu quả cao hơn. Điều này là do các sản phẩm ma trận có thể được tối ưu hóa hơn nữa bằng cách tăng tỷ lệ giữa số phép tính số học và số lần truy cập bộ nhớ cũng như bằng cách sử dụng bộ nhớ đệm bộ nhớ.
Sau đó, đối với các sản phẩm có mật độ thưa thớt, có hai chiến lược:
Ma trận
) sử dụng bộ nhớ lớn theo hàng.Cuối cùng, trong cả hai trường hợp, bạn có thể thử sử dụng bộ lưu trữ theo hàng và cột chính cho các ma trận thưa thớt và quyết định sự kết hợp nào giữa chiến lược và thứ tự lưu trữ cho các ma trận thưa thớt phù hợp nhất với trường hợp của bạn.
Về c++ - tính kém hiệu quả của phép nhân ma trận thưa x dày đặc, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/39547061/
Sự cố và bản ghi khắc phục sự cố--Kết nối Java RMI bị từ chối lưu trữ: xxxx.... Khi học JavaRMI, tôi gặp phải các lý do sự cố sau:
Tôi đang thử nghiệm loại Rank-N và cố gắng nhập xx . Nhưng tôi thấy rằng cả hai chức năng đều có thể được nhập theo cùng một cách, điều này khá không trực quan. f :: (forall a b. a -> b) -> cfx = xxg ::
Câu hỏi này đã có câu trả lời: Làm cách nào để so sánh hai Chuỗi phiên bản trong Java? (31 câu trả lời) Đã đóng 8 năm trước. Có ai biết cách so sánh hai chuỗi phiên bản trong Java không
Câu hỏi này đã có câu trả lời: Các toán tử tăng sau (i++) và tăng trước (++i) hoạt động như thế nào trong Java?
Sau đây là đầu ra của lệnh netstat với các tùy chọn -n và -r, trong đó trường đích hiển thị địa chỉ được nén (127.1/16). Tôi muốn biết liệu có cách nào hoặc tùy chọn nào để lệnh netstat hiển thị toàn bộ IP mục tiêu (127.1.1.1) không.
Mình biết cách chứng minh: (- ∀ x, px) → (∃ x, - px) Cách chứng minh là: định lý : (- ∀ x, px) → (∃ x, - px) := bắt đầu giới thiệu n
Làm cách nào x * x có thể được thay đổi bằng cách lưu trữ nó trong "biến tự động"? Tôi nghĩ nó vẫn giống nhau và thử nghiệm của tôi cho thấy rằng loại, kích thước và giá trị rõ ràng là giống nhau. Nhưng ngay cả x * x == (xx = x * x) cũng sai. Cái gì
Giả sử, chúng ta diễn đạt nó như thế này: someIQueryable.Where(x => x.SomeBoolProperty) someIQueryable.Where(x => !x.SomeBoolProper
Tôi có một chuỗi 1234X5678 và tôi sử dụng biểu thức chính quy này để khớp với mẫu .X|..X|X. Tôi nhận được 34X. Câu hỏi đặt ra là tại sao tôi không nhận được 4X hoặc X5? Tại sao biểu thức chính quy chọn thực thi mẫu thứ hai? Câu trả lời hay nhất ở đây
Một người bạn của tôi đã gặp phải vấn đề này trong một cuộc phỏng vấn. Tìm giá trị của x làm cho hàm trả về đúng. function f(x) { return (x++ !== x) && (x++ === x);
Câu hỏi này đã có câu trả lời ở đây: đã đóng cửa 10 năm trước. Có thể trùng lặp: Làm việc với foo không dễ dàng hơn khi nó được biểu diễn b
Tôi mới sử dụng Android và đang thực hành phát triển ứng dụng nhắm mục tiêu phiên bản 2.2 và tôi cần trợ giúp để hiểu cách mở rộng ứng dụng của mình sang các phiên bản khác, cụ thể là 1.x, 2.3.x, 3.x và 4.xx và một số cho độ phân giải màn hình
Tại sao trường hợp 1 cho chúng ta:error: TypeError: x is unexpected on line... //case 1 var x.push(x);
Mã đầu tiên: # CASE 01 def test1(x): x += x print xl = [100] test1(l) print l CASE01 đầu ra: [100, 100
Tôi đang cố gắng hoàn thiện những tính toán lớn của mình. Nếu tôi có một hàm di chuyển tất cả các mục sang bên phải 'i' 2 khoảng trắng, thì tôi có một công thức trông như thế này: (n -1) + (n - 2) + (n - 3) ... (n - n) lần lặp đầu tiên tôi phải
Với một chuỗi IP (như xxxx/x), tôi sẽ tính toán phạm vi của IP như thế nào. Trường hợp phổ biến nhất có thể là 198.162.1.1/24 nhưng nó có thể là bất kỳ thứ gì, vì luật pháp cho phép mọi thứ. Tôi muốn mang 198.162.1.1/
Trong nỗ lực viết mã Javascript sạch khi mới bắt đầu, gần đây tôi đang đọc bài viết này thì tình cờ thấy đoạn này, về các không gian tên trong JavaScript: The code at the ve
Tôi đang viết một tập lệnh mà tôi muốn tránh làm ô nhiễm phần còn lại của DOM, đó sẽ là tập lệnh của bên thứ 3 thu thập một số dữ liệu phân tích cơ bản về khách truy cập. Tôi thường tạo một "không gian tên" giả bằng cách sử dụng: var x = x || {};
Tôi đã thử chạy bộ test_container_services.py nhưng gặp phải sự cố sau: docker.errors.APIError: 500 Server Error: Internal Server Error ("b'{" message
Có những tình huống nào mà hai câu lệnh if này sẽ tạo ra các kết quả khác nhau không? if(x as X != null) { // Làm gì đó } if(x is X) { // Làm gì đó } ed.
Tôi là một lập trình viên xuất sắc, rất giỏi!