게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C] 행렬 연산 관련 질문 드립니다..!
게시물ID : programmer_21095짧은주소 복사하기
작성자 : 훗날닭집사장
추천 : 0
조회수 : 314회
댓글수 : 2개
등록시간 : 2017/07/26 08:50:49
옵션
  • 본인삭제금지
이걸 어떤 형태의 for문으로 연산을 해줘야할지 머리가 돌아가다 못해 소용돌이 치는 기분이 들어서.. 올립니다.

for(iterator = 0; iterator < img_rows; iterator++) // img_rows = 28
{
for(j_iterator = 0; j_iterator < img_cols; j_iterator++) // img_cols = 28
{
Activation += input_shape[j_iterator][0] * filter[0][a] + input_shape[j_iterator][1] * filter[1][a] + input_shape[j_iterator][2] * filter[2][a];

output_layer[iterator][j_iterator] = Activationrelu(Activation);
Activation = 0;
a++;
printf("i : %d j : %d ", iterator, j_iterator);
if(a == nb_conv) // nb_conv = 3
{
a = 0;
}
}
}


이런 형태의 for문으로 구성되어 있는데요. (완성된 형태가 아닙니다 저 Activation에 대입되는 부분들이 잘못되어 있어요)

여기서 input_shape는 28x28 행렬이며 filter는 3x3 행렬입니다.

28x28짜리 행렬 (input_shape) 을 펼쳐놓으면 아래와 같이 될텐데


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

...

...

...

...



얘를 3x3 행렬 (filter) 로 하나씩 훑으면서 곱셈연산해주고 값을 다 더한것을 28x28 행렬의 각 위치에 넣는거에요.


그럼 이 28x28 행렬의 크기는 줄어들겠죠.. 3x3 행렬이 훑는다하면 총 9개 위치에 있는 값들이 사라지고 0x0 부터 값이 채워지니까요.


순서대로 표현하자면



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27


28x28 행렬의 [0 1 2          

                0 1 2     x    3x3 행렬 (filter)                    <- 곱셈연산후 나온 값들을 모두 합쳐 28x28행렬의 0,0 위치에 삽입

                0 1 2]                        



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27


28x28 행렬의 [1 2 3            

                1 2 3     x    3x3 행렬 (filter)               <- 곱셈연산후 나온 값들을 모두 합쳐 28x28행렬의 0,1 위치에 삽입

                1 2 3]                        


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27


28x28 행렬의 [2 3 4           

                2 3 4     x     3x3 행렬(filter)              <- 곱셈연산후 나온 값들을 모두 합쳐 28x28행렬의 0,2 위치에 삽입

                2 3 4]                      


이런 식으로 쭉 말이죠.



이걸 저 배열들의 인덱스를 어떤식으로 조정해줘서 연산을 진행해야할지 모르겠습니다. 도움을 부탁드립니다 ㅠ_ㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호