VNet 네트워크의 concatenation 구현
3113 단어 딥 러닝
매개변수 해석:
input_tensor는 입력한tensor입니다. 바로 재단된feature 맵입니다.
begin은 모든 차원의 시작 위치입니다.
크기는 각 차원에서 몇 개의 원소를 꺼내는 것과 같다
다음 예를 들어 설명합니다.
참고 문헌:https://www.jianshu.com/p/71e6ef6c121b
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [1, 1, 3])
출력: [[[3,3,3]]], 마지막 shape는 size와 같고, size는 (1,1,3)
먼저 shape의 개념을 이해하고 t를 분해한다.
t = [A, B, C] # 1차원
A=[i,j], B=[k,l], C=[m,n]#2차원
i=[1,1,1], j=[2,2,2], k=[3,3], l=[4,4,4], m=[5,5,5], n=[6,6,6] #이것은 3차원
t에 대해 말하자면, 가장 바깥쪽 괄호 안에는 3개의 물건이 있는데, 각각 A, B, C이다.이 세 가지 물건은 각각 i와 j, k와 l, m와 n 두 개가 있다.
그것들 중에는 하나하나에 또 3개의 숫자가 있기 때문에 t의 shape는 [3, 2, 3]
자르기 시작:
tf.slice(t, [1, 0, 0], [1, 1, 3]) # begin = [1, 0, 0],size=[1,1,3]
매개변수 해석:
begin과size의 의미는 왼쪽에서 오른쪽으로, begin의 의미는 시작 위치이다. 그 중의 모든 숫자는 하나의 차원을 대표한다. 그러면 [1,0,0의 의미는 3개의 차원 중에서 각 차원은 어디에서 계산하는가를 의미한다.
1차원은 [A, B, C]이고 begin리[1, 0, 0]는 1이다. 즉, B부터 계산한다.그 다음에 2차원에서 B=[k,l](주의하세요, 저는 여기에 B=[k,l]만 썼는데 B만 쓸모가 있는 것은 아닙니다. 만약size에서 첫 번째 숫자가 2이면 B와 C가 모두 뽑힐 수 있습니다), begin에서 두 번째 숫자는 0입니다. 즉, k에서 계산하고, 3차원 k=[3,3], begin에서 세 번째 숫자는 0입니다. 첫 번째 3에서 계산합니다. 그리고size는 각 차원의 크기, 즉 각 차원에서 몇 개의 원소를 취하는 것을 의미합니다.사이즈의 크기는 마지막으로 출력된tensor의shape입니다.
size에서 첫 번째는 1입니다. 첫 번째 차원에서 하나의 원소를 취하는 것을 의미합니다.t=[A, B, C]begin은 B부터 계산하고 하나를 취하면 B다. 그러면 1차원 결과는 [B]
size 두 번째도 1, 2차원 B=[k,l],begin은 k에서 계산하고 하나는 k를 취하면 2차원 결과는 [[k]]이다.
size 세 번째는 3, 3차원 k=[3, 3, 3],begin에서 첫 번째, 세 번째, 세 번째, 세 번째, 세 번째, 세 번째를 모두 뽑아야 하기 때문에 출력: [[[3, 3, 3]]]
다시 한 번 예를 들자.
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [1, 2, 3])
begin이냐[1,0,0]이냐,size의 첫 번째 차원에서 하나를 취하느냐,[B]를 취하느냐,그리고 size의 두 번째 차원에서 1이 아니라 2를 취하느냐는 뜻이다.B=[k,l] 기억나세요?지금은 k만 있는 것이 아니라 k와 l 모두 사이즈 3차원에서 3개를 뽑아야 한다. 즉, k=[3, 3, 3]와 l=[4, 4, 4]를 대상으로 각각 3개의 원소를 뽑아야 한다. 마지막 출력: [[[3, 3, 3], [4, 4, 4]]]
세 번째 예:
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]])
tf.slice(t, [1, 0, 0], [-1, -1, -1])
만약 사이즈 입력 값이 -1이라면 그 차원에서 모든 수가 출력됩니다.위의 예에서 begin은 [1,0,0]이다.세 차원이 모두 -1이면 출력 결과: 첫 번째 차원은 [B,C], 두 번째 차원은 [k,l], [m, n], 세 번째 차원은 [[[3,3,3], [4,4], [5,5,5], [6,6]]]
마지막 자르기 및 concatenate 함수:
def crop_and_concat(x1, x2): #x1 encoding feature map,x2 decoding feature map
x1_shape = tf.shape(x1)
x2_shape = tf.shape(x2)
# offsets for the top left corner of the crop
offsets = [0, (x1_shape[1] - x2_shape[1]) // 2, #
(x1_shape[2] - x2_shape[2]) // 2, (x1_shape[3] - x2_shape[3]) // 2, 0]
size = [-1, x2_shape[1], x2_shape[2], x2_shape[3], -1] #
x1_crop = tf.slice(x1, offsets, size)
return tf.concat([x1_crop, x2], 4)
이렇게 자르는 것과 등급을 연결하는 것은 하나의 폐단이 있다.
네트워크 입력은 16배 크기여야 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
keras 기반 EfficientNet 재현[2 트레이닝 모듈]B3는 일반적인 서버가 달리기에 적합할 것 같아요.batchsize는 너무 크게 설정하지 마세요. 메모리를 초과하기 쉬워요.이것은 앞의 AlexNet 데이터 집합을 사용하고 다음에 데이터 집합 주소를 넣으세요. 트림...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.