Keras는 모델 수준의 라이브러리로, 딥러닝 모델을 개발하기 위한 고수준의 빌딩 블록을 제공합니다. 텐서곱이나 합성곱 등과 같은 저수준의 연산을 직접 다루지는 않습니다. 대신에, “백엔드 엔진"으로서 역할하는 특화되고 최적화된 텐서 조작 라이브러리를 제공합니다. 특정 라이브러리 하나를 선택하여 거기에 의존하여 구현하기 보다는, Keras는 모듈화 방식으로 접근하여 여러 다른 백엔드 엔진이 원활하게 연결될 수 있도록 합니다.
현재, Keras에서는 다음과 같은 세 가지 백엔드 구현이 가능합니다: TensorFlow 백엔드, Theano 백엔드, CNTK 백엔드.
앞으로 더 많은 백엔드 선택지가 추가되기를 희망합니다.
Keras를 한번이라도 구동하였다면, Keras 구성 파일을 다음 경로에서 찾을 수 있습니다:
$HOME/.keras/keras.json
만약 이 위치에 없다면 만들도록 하세요.
윈도 사용자를 위한 주의 사항: $HOME
을 %USERPROFILE%
로 바꾸세요.
구성 파일 기본값은 다음과 같습니다:
{
"image_data_format": "channels_last",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
간단하게 backend
부분을 "theano"
, "tensorflow"
, "cntk"
로 변경하면, Keras는 새로운 구성을 다음 Keras 코드 구동 시부터 적용합니다.
또한 다음과 같이 환경 변수 KERAS_BACKEND
를 정의하여 구성 파일에 정의된 것에 오버라이드할 수도 있습니다:
KERAS_BACKEND=tensorflow python -c "from keras import backend"
Using TensorFlow backend.
{
"image_data_format": "channels_last",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
이런 설정을 $HOME/.keras/keras.json
을 편집하여 변경할 수 있습니다.
image_data_format
: 문자열이며, "channels_last"
나 "channels_first"
입니다. Keras가 따를 데이터 양식을 지정합니다(keras.backend.image_data_format()
가 반환합니다).
"channels_last"
가 (rows, cols, channels)
, "channels_first"
가 (channels, rows, cols)
와 같습니다."channels_last"
가 (conv_dim1, conv_dim2, conv_dim3, channels)
, "channels_first"
가 (channels, conv_dim1, conv_dim2, conv_dim3)
와 같습니다.epsilon
: 실수이며 연산 중 0으로 나뉘어지는 것을 방지하는 작은 상수입니다.floatx
: 문자열이며 "float16"
, "float32"
, "float64"
중 택일합니다. 실수의 기본 자릿수입니다.backend
: 문자열이며 "tensorflow"
, "theano"
, "cntk"
중 택일합니다.작성한 Keras 모듈이 Theano (th
) 나 TensorFlow (tf
) 모두에 사용가능하도록 하고자 한다면 추상화 Keras 백엔드 API를 통해 작성해야 합니다.
다음과 같이 백엔드 모듈을 들여올 수 있습니다:
from keras import backend as K
아래 코드는 입력 위치표시자(placeholder) 인스턴스를 생성합니다. 이 것은 tf.placeholder()
, th.tensor.matrix()
, th.tensor.tensor3()
등과 등가입니다.
input = K.placeholder(shape=(2, 4, 5))
# also works:
input = K.placeholder(shape=(None, 4, 5))
# also works:
input = K.placeholder(ndim=3)
아래 코드는 공유 변수 인스턴스를 생성합니다.이 것은 tf.Variable()
나 th.shared()
와 등가입니다.
import numpy as np
val = np.random.random((3, 4, 5))
var = K.variable(value=val)
# all-zeros variable:
var = K.zeros(shape=(3, 4, 5))
# all-ones:
var = K.ones(shape=(3, 4, 5))
필요한 대부분의 텐서 연산은 TensorFlow 나 Theano에서 처럼 할 수 있습니다 :
# Initializing Tensors with Random Numbers
b = K.random_uniform_variable(shape=(3, 4)). # Uniform distribution
c = K.random_normal_variable(shape=(3, 4)). # Gaussian distribution
d = K.random_normal_variable(shape=(3, 4)).
# Tensor Arithmetics
a = b + c * K.abs(d)
c = K.dot(a, K.transpose(b))
a = K.sum(b, axis=1)
a = K.softmax(b)
a = K.concatenate([b, c], axis=-1)
# etc...
backend()
현재 사용 중인 백엔드를 확인하기 위해 공개적으로 접근 가능한 메소드입니다.
반환값
문자열이며, Keras가 현재 사용 중인 백엔드의 이름을 반환합니다.
예제
>>> keras.backend.backend()
'tensorflow'
epsilon()
수치 표현에 있어 0으로 나뉘어지는 것을 방지하는 인자의 값을 반환합니다.
반환값
실수를 반환합니다.
예제
>>> keras.backend.epsilon()
1e-08
set_epsilon(e)
수치 표현에 있어 0으로 나뉘어지는 것을 방지하는 인자의 값을 설정합니다.
인수
예제
>>> from keras import backend as K
>>> K.epsilon()
1e-08
>>> K.set_epsilon(1e-05)
>>> K.epsilon()
1e-05
floatx()
기본 실수 형식을 문자열로 반환합니다('float16', 'float32', 'float64').
반환값
문자열이며 현재 기본 실수 형식을 반환합니다.
예제
>>> keras.backend.floatx()
'float32'
set_floatx(floatx)