어떤 Keras 층 (위해 Layer
클래스), 캔 누군가의 차이점을 이해하는 방법을 설명합니다 input_shape
, units
, dim
, 등?
예를 들어 의사는 units
레이어의 출력 모양을 지정 한다고 말합니다 .
아래 신경망의 이미지 hidden layer1
에는 4 단위가 있습니다. 이것이 객체 의 units
속성으로 직접 변환됩니까 Layer
? 아니면 units
Keras에서 숨겨진 레이어의 모든 가중치의 모양에 단위 수를 곱한 것입니까?
답변
단위 :
“뉴런”또는 “셀”의 양 또는 레이어 내부에있는 모든 것.
각 레이어의 속성이며 예, 출력 모양과 관련이 있습니다 (나중에 볼 수 있음). 다른 레이어와 개념적으로 다른 입력 레이어를 제외하고 그림에는 다음이 있습니다.
- 숨겨진 층 1 : 4 단위 (4 뉴런)
- 숨겨진 레이어 2 : 4 대
- 마지막 층 : 1 개 단위
모양
모양은 모델 구성의 결과입니다. 셰이프는 배열 또는 텐서가 각 차원에있는 요소 수를 나타내는 튜플입니다.
예 : 모양 (30,4,10)
은 첫 번째 차원에 30 개의 요소, 두 번째에 4, 세 번째에 10을 포함하는 3 차원 배열 또는 텐서를 의미하며 총 30 * 4 * 10 = 1200 개의 요소 또는 숫자입니다.
입력 모양
층 사이에 흐르는 것은 텐서입니다. 텐서는 모양이있는 행렬로 볼 수 있습니다.
Keras에서 입력 레이어 자체는 레이어가 아니라 텐서입니다. 첫 번째 숨겨진 레이어로 보내는 시작 텐서입니다. 이 텐서는 훈련 데이터와 모양이 같아야합니다.
예 : RGB (3 채널)로 50×50 픽셀의 30 개 이미지가있는 경우 입력 데이터의 모양은입니다 (30,50,50,3)
. 입력 레이어 텐서는이 모양이어야합니다 ( “케 라스 모양”섹션의 세부 사항 참조).
각 유형의 레이어에는 특정 치수의 입력이 필요합니다.
Dense
레이어는 다음과 같이 입력이 필요합니다(batch_size, input_size)
- 또는
(batch_size, optional,...,optional, input_size)
- 또는
- 2D 컨볼 루션 레이어에는 다음과 같은 입력이 필요합니다.
- 사용하는 경우
channels_last
:(batch_size, imageside1, imageside2, channels)
- 사용하는 경우
channels_first
:(batch_size, channels, imageside1, imageside2)
- 사용하는 경우
- 1D 컨볼 루션 및 반복 레이어 사용
(batch_size, sequence_length, features)
이제 입력 모양은 사용자가 정의 할 수있는 유일한 모양입니다. 모델에서 알 수 없기 때문입니다. 오직 훈련 데이터에 기초하여 당신 만이 알고 있습니다.
다른 모든 모양은 각 레이어의 단위와 특성을 기반으로 자동 계산됩니다.
모양과 단위의 관계-출력 모양
입력 모양이 주어지면 다른 모든 모양은 레이어 계산의 결과입니다.
각 레이어의 “단위”는 출력 모양 (레이어에 의해 생성되고 다음 레이어의 입력이 될 텐서의 모양)을 정의합니다.
각 유형의 레이어는 특정 방식으로 작동합니다. 고밀도 레이어는 “단위”를 기준으로 출력 모양을 가지며, 컨볼 루션 레이어는 “필터”를 기반으로 출력 모양을 갖습니다. 그러나 항상 일부 레이어 속성을 기반으로합니다. (각 레이어 출력에 대한 설명서를 참조하십시오)
그래프에 표시되는 유형 인 “밀도”레이어에서 발생하는 상황을 보여 드리겠습니다.
조밀 한 레이어의 출력 모양은 (batch_size,units)
입니다. 예, 레이어의 속성 인 단위는 출력 모양도 정의합니다.
- 숨겨진 레이어 1 : 4 단위, 출력 형태 :
(batch_size,4)
. - 숨겨진 레이어 2 : 4 단위, 출력 형태 :
(batch_size,4)
. - 마지막 레이어 : 1 단위, 출력 형태 :
(batch_size,1)
.
분동
입력 및 출력 형태에 따라 가중치가 자동으로 계산됩니다. 다시 말하지만, 각 유형의 레이어는 특정 방식으로 작동합니다. 그러나 가중치는 수학 연산에 의해 입력 모양을 출력 모양으로 변환 할 수있는 행렬이됩니다.
밀집된 레이어에서 가중치는 모든 입력 값을 곱합니다. 입력 당 하나의 열과 단위 당 하나의 행을 가진 행렬이지만 기본 작업에는 중요하지 않은 경우가 많습니다.
이미지에서 각 화살표에 곱셈 숫자가 있으면 모든 숫자가 함께 가중치 행렬을 형성합니다.
케 라스의 모양
이전에는 입력 모양이 30 개, 50×50 픽셀 및 3 개 채널 인 예를 들었습니다 (30,50,50,3)
.
입력 형태는 사용자가 정의해야하는 유일한 형태이므로 Keras는 첫 번째 레이어에서 요구합니다.
그러나이 정의에서 Keras는 배치 크기 인 첫 번째 차원을 무시합니다. 모델은 모든 배치 크기를 처리 할 수 있어야하므로 다른 차원 만 정의하십시오.
input_shape = (50,50,3)
#regardless of how many images I have, each image has this shape
선택적으로 또는 특정 종류의 모델에 필요한 경우 batch_input_shape=(30,50,50,3)
또는을 통해 배치 크기가 포함 된 모양을 전달할 수 있습니다 batch_shape=(30,50,50,3)
. 이것은 훈련 가능성을이 고유 한 배치 크기로 제한하므로 실제로 필요할 때만 사용해야합니다.
어느 쪽을 선택하든 모델의 텐서는 배치 치수를 갖습니다.
input_shape=(50,50,3)
따라서을 사용하더라도 keras가 메시지를 보내거나 모델 요약을 인쇄 할 때이 표시 (None,50,50,3)
됩니다.
첫 번째 차원은 배치 크기이며 None
훈련에 제공하는 예제 수에 따라 달라질 수 있기 때문입니다. (배치 크기를 명시 적으로 정의한 경우 정의한 숫자가 대신 표시됩니다. None
)
또한 고급 작업에서는 실제로 텐서 (예 : Lambda 레이어 또는 손실 함수)에서 직접 작업 할 때 배치 크기 차원이 있습니다.
- 따라서 입력 모양을 정의 할 때 배치 크기를 무시합니다.
input_shape=(50,50,3)
- 텐서에서 직접 작업을 수행하면 모양이 다시 나타납니다.
(30,50,50,3)
- keras 가 메시지를 보내면 메시지 유형에 따라 모양이
(None,50,50,3)
또는(30,50,50,3)
입니다.
어둑한
그리고 결국, 무엇 dim
입니까?
입력 셰이프에 하나의 차원 만있는 경우 튜플로 제공 할 필요가없고 input_dim
스칼라 숫자로 제공 됩니다.
따라서 입력 레이어에 3 개의 요소가있는 모델에서 다음 두 가지 중 하나를 사용할 수 있습니다.
input_shape=(3,)
-차원이 하나 뿐인 경우 쉼표가 필요합니다input_dim = 3
그러나 텐서를 직접 처리 할 때 종종 dim
텐서의 치수를 나타냅니다. 예를 들어, 모양 (25,10909)의 텐서는 2 차원입니다.
Keras에서 이미지 정의
Keras에는 두 가지 방법, Sequential
모델 또는 기능적 API가 Model
있습니다. 순차적 모델을 사용하는 것을 좋아하지 않습니다. 나중에 분기가있는 모델을 원하기 때문에 어쨌든 잊어 버려야합니다.
추신 : 여기에서는 활성화 기능과 같은 다른 측면을 무시했습니다.
순차 모델의 경우 :
from keras.models import Sequential
from keras.layers import *
model = Sequential()
#start from the first hidden layer, since the input is not actually a layer
#but inform the shape of the input, with 3 elements.
model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input
#further layers:
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer
기능적 API 모델로 :
from keras.models import Model
from keras.layers import *
#Start defining the input tensor:
inpTensor = Input((3,))
#create the layers and pass them the input tensor to get the output tensor:
hidden1Out = Dense(units=4)(inpTensor)
hidden2Out = Dense(units=4)(hidden1Out)
finalOut = Dense(units=1)(hidden2Out)
#define the model's start and end points
model = Model(inpTensor,finalOut)
텐서의 모양
레이어를 정의 할 때 배치 크기를 무시하십시오.
- inpTensor :
(None,3)
- hidden1Out :
(None,4)
- hidden2Out :
(None,4)
- finalOut :
(None,1)
답변
입력 치수가 명확 해짐 :
직접적인 대답은 아니지만 입력 차원이라는 단어가 충분히 혼란 스러울 수 있음을 깨달았습니다.
(단어 차원 만) 다음을 참조 할 수 있습니다.
a) 시계열 신호를 전송하기위한 센서 축 #N 또는 RGB 색상 채널 (3)과 같은 입력 데이터 (또는 스트림 ) 의 차원 : 제안 된 단어 => “InputStream 차원”
b) FFT 변환 된 스펙트럼 값에서 입력 피처 (또는 입력 레이어) (MINST 컬러 이미지의 경우 28 x 28 = 784 ) 의 총 수 / 길이 또는 3000
“입력 레이어 / 입력 기능 차원”
c) 입력의 차원 ( 치수 #) (일반적으로 Keras LSTM에서 예상되는 3D) 또는 (#RowofSamples, #of Senors, #of Values ..) 3이 정답입니다.
“N 차원의 입력”
d) 이 래핑되지 않은 입력 이미지 데이터 의 특정 입력 모양 (예 : (30,50,50,3) 또는 래핑되지 않은 Keras 인 경우 (30, 250, 3)
:
Keras의 input_dim은 입력 레이어의 차원 / 입력 기능 수를 나타냅니다.
model = Sequential()
model.add(Dense(32, input_dim=784)) #or 3 in the current posted example above
model.add(Activation('relu'))
Keras LSTM에서는 총 시간 단계를 나타냅니다.
이 용어는 매우 혼란스럽고 정확하며 우리는 매우 혼란스러운 세상에 살고 있습니다 !!
기계 학습의 과제 중 하나는 다른 언어 나 방언 및 용어를 다루는 것입니다 (예를 들어 5-8 개의 매우 다른 영어 버전을 사용하는 경우 다른 스피커와 대화하기 위해서는 매우 높은 숙련도가 필요함). 아마도 이것은 프로그래밍 언어에서도 동일합니다.