제퍼넷 로고

Keras에서 Lambda 계층 작업

시간

Keras에서 Lambda 계층 작업

이 튜토리얼에서는 Keras의 Lambda 계층을 사용하여 데이터에 대해 사용자 지정 작업을 수행하는 모델을 구축, 저장 및 로드하는 방법을 다룹니다.


Keras에서 Lambda 계층 작업

Keras는 딥 러닝 모델 구축을 위한 인기 있고 사용하기 쉬운 라이브러리입니다. 입력, 조밀, 콘볼루션, 전치 콘볼루션, 형태 변경, 정규화, 드롭아웃, 병합, 활성화 등 알려진 모든 유형의 레이어를 지원합니다. 각 계층은 데이터에 대해 특정 작업을 수행합니다.

즉, 기존 레이어에 적용되지 않은 데이터에 대해 작업을 수행하려는 경우 이러한 기존 레이어 유형으로는 작업에 충분하지 않을 수 있습니다. 간단한 예로, 모델 아키텍처의 특정 지점에 고정 숫자를 추가하는 작업을 수행하는 레이어가 필요하다고 가정해 보겠습니다. 이 작업을 수행하는 기존 레이어가 없기 때문에 직접 만들 수 있습니다.

이 튜토리얼에서는 Lambda Keras의 레이어. 이를 통해 함수로 적용할 작업을 지정할 수 있습니다. 또한 람다 레이어가 있는 모델을 빌드할 때 Keras 로딩 기능을 디버깅하는 방법도 알아봅니다.

이 자습서에서 다루는 섹션은 다음과 같습니다.

  • 다음을 사용하여 Keras 모델 구축 Functional API
  • 추가 Lambda 층
  • 람다 레이어에 두 개 이상의 텐서 전달
  • 람다 레이어를 사용하여 모델 저장 및 로드
  • 람다 레이어가 포함된 모델을 로드하는 동안 SystemError 해결

이 프로젝트에 생명을 불어넣으세요

그라디언트에서 실행

다음을 사용하여 Keras 모델 구축하기 Functional API

 
Keras에서 모델을 구축하는 데 사용할 수 있는 세 가지 API가 있습니다.

  1. 순차 API
  2. 기능성 API
  3. 모델 서브클래싱 API

각 항목에 대한 자세한 내용은 다음에서 확인할 수 있습니다. 이 게시물에하지만 이 튜토리얼에서는 Keras 사용에 중점을 둘 것입니다. Functional API 사용자 정의 모델을 구축하기 위한 것입니다. 우리는 아키텍처에 초점을 맞추고 싶기 때문에 간단한 문제 예제를 사용하여 MNIST 데이터 세트의 이미지를 인식하는 모델을 구축하겠습니다.

Keras에서 모델을 구축하려면 레이어를 서로 쌓아야 합니다. 이러한 레이어는 다음에서 사용할 수 있습니다. keras.layers 모듈(아래에서 가져옴). 모듈 이름 앞에는 tensorflow TensorFlow를 Keras의 백엔드로 사용하기 때문입니다.

import tensorflow.keras.layers


가장 먼저 생성할 레이어는 Input 층. 이는 다음을 사용하여 생성됩니다. tensorflow.keras.layers.Input() 수업. 이 클래스의 생성자에 전달되는 필수 인수 중 하나는 shape 훈련에 사용될 데이터의 각 샘플의 모양을 지정하는 인수입니다. 이 튜토리얼에서는 우선 밀집 레이어를 사용할 것이므로 입력은 1D 벡터여야 합니다. 그만큼 shape 따라서 인수에는 하나의 값을 가진 튜플이 할당됩니다(아래 표시). MNIST 데이터세트의 각 이미지 크기가 784 x 28 = 28이므로 값은 784입니다. name 인수는 해당 레이어의 이름을 지정합니다.

input_layer = tensorflow.keras.layers.Input(shape=(784), name="input_layer")


다음 레이어는 다음을 사용하여 생성된 조밀한 레이어입니다. Dense 아래 코드에 따라 클래스를 만듭니다. 이름이 지정된 인수를 허용합니다. units 이 레이어의 뉴런 수를 지정합니다. 해당 레이어의 이름을 괄호 안에 지정하여 이 레이어가 입력 레이어에 어떻게 연결되는지 확인하세요. 이는 기능적 API의 레이어 인스턴스가 텐서에서 호출 가능하고 텐서를 반환하기 때문입니다.

dense_layer_1 = tensorflow.keras.layers.Dense(units=500, name="dense_layer_1")(input_layer)


Dense 레이어에 이어 Activation 레이어가 생성됩니다. ReLU 다음 줄에 따라 클래스를 지정합니다.

activ_layer_1 = tensorflow.keras.layers.ReLU(name="activ_layer_1")(dense_layer_1)


다음 행에 따라 또 다른 한 쌍의 Dense-ReLu 레이어가 추가됩니다.

dense_layer_2 = tensorflow.keras.layers.Dense(units=250, name="dense_layer_2")(activ_layer_1)
activ_layer_2 = tensorflow.keras.layers.ReLU(name="relu_layer_2")(dense_layer_2) dense_layer_3 = tensorflow.keras.layers.Dense(units=20, name="dense_layer_3")(activ_layer_2)
activ_layer_3 = tensorflow.keras.layers.ReLU(name="relu_layer_3")(dense_layer_3)


다음 줄은 MNIST 데이터세트의 클래스 수에 따라 네트워크 아키텍처에 마지막 레이어를 추가합니다. MNIST 데이터세트에는 10개의 클래스(각 숫자당 하나씩)가 포함되어 있으므로 이 레이어에 사용되는 단위 수는 10입니다.

dense_layer_4 = tensorflow.keras.layers.Dense(units=10, name="dense_layer_4")(activ_layer_3)


각 수업의 점수를 반환하려면 softmax 다음 줄에 따라 이전 Dense 레이어 뒤에 레이어가 추가됩니다.

output_layer = tensorflow.keras.layers.Softmax(name="output_layer")(dense_layer_4)


이제 레이어를 연결했지만 모델이 아직 생성되지 않았습니다. 모델을 구축하려면 이제 다음을 사용해야 합니다. Model 아래와 같이 수업을 진행합니다. 허용되는 처음 두 인수는 입력 및 출력 레이어를 나타냅니다.

model = tensorflow.keras.models.Model(input_layer, output_layer, name="model")


데이터 세트를 로드하고 모델을 교육하기 전에 다음을 사용하여 모델을 컴파일해야 합니다. compile() 방법.

model.compile(optimizer=tensorflow.keras.optimizers.Adam(lr=0.0005), loss="categorical_crossentropy")


사용 model.summary() 모델 아키텍처의 개요를 볼 수 있습니다. 입력 레이어는 모양(None, 784)의 텐서를 허용합니다. 이는 각 샘플이 784개 요소의 벡터로 재구성되어야 함을 의미합니다. 출력 Softmax 레이어는 10개의 숫자를 반환하며, 각 숫자는 MNIST 데이터세트의 해당 클래스에 대한 점수입니다.

_________________________________________________________________
Layer (type) Output Shape Param # =================================================================
input_layer (InputLayer) [(None, 784)] 0 _________________________________________________________________
dense_layer_1 (Dense) (None, 500) 392500 _________________________________________________________________
relu_layer_1 (ReLU) (None, 500) 0 _________________________________________________________________
dense_layer_2 (Dense) (None, 250) 125250 _________________________________________________________________
relu_layer_2 (ReLU) (None, 250) 0 _________________________________________________________________
dense_layer_3 (Dense) (None, 20) 12550 _________________________________________________________________
relu_layer_3 (ReLU) (None, 20) 0 _________________________________________________________________
dense_layer_4 (Dense) (None, 10) 510 _________________________________________________________________
output_layer (Softmax) (None, 10) 0 =================================================================
Total params: 530,810
Trainable params: 530,810
Non-trainable params: 0
_________________________________________________________________


이제 모델을 구축하고 컴파일했으므로 데이터 세트가 어떻게 준비되는지 살펴보겠습니다. 먼저 MNIST를 로드하겠습니다. keras.datasets 모듈의 데이터 유형이 다음으로 변경되었습니다. float64 이렇게 하면 값을 0-255 범위에 두는 것보다 네트워크를 더 쉽게 훈련할 수 있고 최종적으로 각 샘플이 784개 요소의 벡터가 되도록 재구성됩니다.

(x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.mnist.load_data() x_train = x_train.astype(numpy.float64) / 255.0
x_test = x_test.astype(numpy.float64) / 255.0 x_train = x_train.reshape((x_train.shape[0], numpy.prod(x_train.shape[1:])))
x_test = x_test.reshape((x_test.shape[0], numpy.prod(x_test.shape[1:])))


손실함수를 사용했기 때문에 compile() 방법은 categorical_crossentropy, 샘플의 레이블은 다음 코드에 따라 핫 인코딩되어야 합니다.

y_test = tensorflow.keras.utils.to_categorical(y_test)
y_train = tensorflow.keras.utils.to_categorical(y_train)


마지막으로 모델 학습은 다음을 사용하여 시작됩니다. fit() 방법.

model.fit(x_train, y_train, epochs=20, batch_size=256, validation_data=(x_test, y_test))


이 시점에서 우리는 이미 존재하는 레이어 유형을 사용하여 모델 아키텍처를 만들었습니다. 다음 섹션에서는 Lambda 사용자 정의 작업을 구축하기 위한 레이어입니다.

Lambda 레이어 사용

 
다음과 같은 조밀한 레이어가 있다고 가정해 보겠습니다. dense_layer_3 우리는 각 요소에 값 2를 추가하는 것과 같이 텐서에 대해 일종의 작업을 수행하려고 합니다. 어떻게 그렇게 할 수 있나요? 기존 레이어 중 어느 것도 이 작업을 수행하지 않으므로 직접 새 레이어를 구축해야 합니다. 다행히도, Lambda 레이어는 바로 그 목적을 위해 존재합니다. 어떻게 사용하는지 논의해 봅시다.

원하는 작업을 수행하는 함수를 구축하는 것부터 시작하세요. 이 경우, 이름이 붙은 함수는 custom_layer 다음과 같이 생성됩니다. 단지 입력 텐서를 받아들이고 다른 텐서를 출력으로 반환합니다. 둘 이상의 텐서가 함수에 전달되면 목록으로 전달됩니다.

이 예에서는 단일 텐서가 입력으로 제공되고 입력 텐서의 각 요소에 2가 추가됩니다.

def custom_layer(tensor): return tensor + 2


작업을 정의하는 함수를 구축한 후 다음으로 다음을 사용하여 람다 레이어를 생성해야 합니다. Lambda 다음 줄에 정의된 클래스입니다. 이 경우 하나의 텐서만 custom_layer 람다 레이어는 다음과 같은 밀집 레이어에서 반환된 단일 텐서에서 호출 가능하기 때문입니다. dense_layer_3.

lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")(dense_layer_3)


다음은 람다 계층을 사용한 후 전체 네트워크를 구축하는 코드입니다.

input_layer = tensorflow.keras.layers.Input(shape=(784), name="input_layer") dense_layer_1 = tensorflow.keras.layers.Dense(units=500, name="dense_layer_1")(input_layer)
activ_layer_1 = tensorflow.keras.layers.ReLU(name="relu_layer_1")(dense_layer_1) dense_layer_2 = tensorflow.keras.layers.Dense(units=250, name="dense_layer_2")(activ_layer_1)
activ_layer_2 = tensorflow.keras.layers.ReLU(name="relu_layer_2")(dense_layer_2) dense_layer_3 = tensorflow.keras.layers.Dense(units=20, name="dense_layer_3")(activ_layer_2) def custom_layer(tensor): return tensor + 2 lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")(dense_layer_3) activ_layer_3 = tensorflow.keras.layers.ReLU(name="relu_layer_3")(lambda_layer) dense_layer_4 = tensorflow.keras.layers.Dense(units=10, name="dense_layer_4")(activ_layer_3)
output_layer = tensorflow.keras.layers.Softmax(name="output_layer")(dense_layer_4) model = tensorflow.keras.models.Model(input_layer, output_layer, name="model")


람다 레이어에 입력되기 전과 후의 텐서를 확인하기 위해 이전 모델 외에 두 개의 새 모델을 만듭니다. 우리는 이것을 부를 것이다 before_lambda_model 과 after_lambda_model. 두 모델 모두 입력 레이어를 입력으로 사용하지만 출력 레이어는 다릅니다. 그만큼 before_lambda_model 모델은 다음의 출력을 반환합니다. dense_layer_3 이는 람다 계층 바로 앞에 존재하는 계층입니다. 의 출력 after_lambda_model 모델은 다음과 같은 람다 계층의 출력입니다. lambda_layer. 이렇게 하면 람다 레이어를 적용하기 전의 입력과 적용 후의 출력을 볼 수 있습니다.

before_lambda_model = tensorflow.keras.models.Model(input_layer, dense_layer_3, name="before_lambda_model")
after_lambda_model = tensorflow.keras.models.Model(input_layer, lambda_layer, name="after_lambda_model")


전체 네트워크를 구축하고 훈련하는 전체 코드는 다음과 같습니다.

import tensorflow.keras.layers
import tensorflow.keras.models
import tensorflow.keras.optimizers
import tensorflow.keras.datasets
import tensorflow.keras.utils
import tensorflow.keras.backend
import numpy input_layer = tensorflow.keras.layers.Input(shape=(784), name="input_layer") dense_layer_1 = tensorflow.keras.layers.Dense(units=500, name="dense_layer_1")(input_layer)
activ_layer_1 = tensorflow.keras.layers.ReLU(name="relu_layer_1")(dense_layer_1) dense_layer_2 = tensorflow.keras.layers.Dense(units=250, name="dense_layer_2")(activ_layer_1)
activ_layer_2 = tensorflow.keras.layers.ReLU(name="relu_layer_2")(dense_layer_2) dense_layer_3 = tensorflow.keras.layers.Dense(units=20, name="dense_layer_3")(activ_layer_2) before_lambda_model = tensorflow.keras.models.Model(input_layer, dense_layer_3, name="before_lambda_model") def custom_layer(tensor): return tensor + 2 lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")(dense_layer_3)
after_lambda_model = tensorflow.keras.models.Model(input_layer, lambda_layer, name="after_lambda_model") activ_layer_3 = tensorflow.keras.layers.ReLU(name="relu_layer_3")(lambda_layer) dense_layer_4 = tensorflow.keras.layers.Dense(units=10, name="dense_layer_4")(activ_layer_3)
output_layer = tensorflow.keras.layers.Softmax(name="output_layer")(dense_layer_4) model = tensorflow.keras.models.Model(input_layer, output_layer, name="model") model.compile(optimizer=tensorflow.keras.optimizers.Adam(lr=0.0005), loss="categorical_crossentropy")
model.summary() (x_train, y_train), (x_test, y_test) = tensorflow.keras.datasets.mnist.load_data() x_train = x_train.astype(numpy.float64) / 255.0
x_test = x_test.astype(numpy.float64) / 255.0 x_train = x_train.reshape((x_train.shape[0], numpy.prod(x_train.shape[1:])))
x_test = x_test.reshape((x_test.shape[0], numpy.prod(x_test.shape[1:]))) y_test = tensorflow.keras.utils.to_categorical(y_test)
y_train = tensorflow.keras.utils.to_categorical(y_train) model.fit(x_train, y_train, epochs=20, batch_size=256, validation_data=(x_test, y_test))


새로 생성된 2개의 모델은 해당 레이어가 실제로 존재하는 기본 모델에서 재사용되기 때문에 컴파일하거나 교육할 필요가 없습니다. model 변하기 쉬운. 해당 모델이 훈련된 후에는 다음을 사용할 수 있습니다. predict() 출력을 반환하는 방법 before_lambda_modelafter_lambda_model 람다 레이어의 결과가 어떻게 나타나는지 확인하는 모델입니다.

p = model.predict(x_train) m1 = before_lambda_model.predict(x_train)
m2 = after_lambda_model.predict(x_train)


다음 코드는 처음 2개 샘플의 출력을 인쇄합니다. 보시다시피, m2  배열은 실제로 다음의 결과입니다. m1 2를 추가한 후입니다. 이것이 바로 사용자 정의 람다 레이어에 적용한 작업입니다.

print(m1[0, :])
print(m2[0, :]) [ 14.420735 8.872794 25.369402 1.4622561 5.672293 2.5202641 -14.753801 -3.8822086 -1.0581762 -6.4336205 13.342142 -3.0627508 -5.694006 -6.557313 -1.6567478 -3.8457105 11.891999 20.581928 2.669979 -8.092522 ]
[ 16.420734 10.872794 27.369402 3.462256 7.672293 4.520264 -12.753801 -1.8822086 0.94182384 -4.4336205 15.342142 -1.0627508 -3.694006 -4.557313 0.34325218 -1.8457105 13.891999 22.581928 4.669979 -6.0925217 ]


이 섹션에서는 람다 레이어를 사용하여 단일 입력 텐서에 대한 작업을 수행했습니다. 다음 섹션에서는 두 개의 입력 텐서를 이 레이어에 전달하는 방법을 살펴보겠습니다.

둘 이상의 텐서를 Lambda 계층에 전달

 
이름이 지정된 두 레이어에 의존하는 작업을 수행한다고 가정합니다. dense_layer_3relu_layer_3. 이 경우 두 개의 텐서를 전달하면서 람다 레이어를 호출해야 합니다. 이는 다음 줄에 제공된 대로 이러한 모든 텐서가 포함된 목록을 생성하면 간단히 수행됩니다.

lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")([dense_layer_3, activ_layer_3])


이 목록은 다음으로 전달됩니다. custom_layer() 함수를 사용하면 다음 코드에 따라 간단히 개별 레이어를 가져올 수 있습니다. 단지 이 두 레이어를 함께 추가하는 것뿐입니다. 실제로 Keras에는 이름이 붙은 레이어가 있습니다. Add 두 개 이상의 레이어를 추가하는 데 사용할 수 있지만 Keras에서 지원하지 않는 다른 작업이 있는 경우를 대비해 직접 수행할 수 있는 방법을 제시할 뿐입니다.

def custom_layer(tensor): tensor1 = tensor[0] tensor2 = tensor[1] return tensor1 + tensor2


다음 코드는 세 가지 모델을 구축합니다. 두 개는 출력을 캡처하기 위한 것입니다. dense_layer_3activ_layer_3 람다 계층으로 전달되고, 람다 계층 자체의 출력을 캡처하기 위한 또 다른 계층이 전달됩니다.

before_lambda_model1 = tensorflow.keras.models.Model(input_layer, dense_layer_3, name="before_lambda_model1")
before_lambda_model2 = tensorflow.keras.models.Model(input_layer, activ_layer_3, name="before_lambda_model2") lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")([dense_layer_3, activ_layer_3])
after_lambda_model = tensorflow.keras.models.Model(input_layer, lambda_layer, name="after_lambda_model")


출력을 보려면 dense_layer_3activ_layer_3및 lambda_layer 레이어에서 다음 코드는 출력을 예측하고 인쇄합니다.

m1 = before_lambda_model1.predict(x_train)
m2 = before_lambda_model2.predict(x_train)
m3 = after_lambda_model.predict(x_train) print(m1[0, :])
print(m2[0, :])
print(m3[0, :]) [ 1.773366 -3.4378722 0.22042789 11.220362 3.4020965 14.487111 4.239182 -6.8589864 -6.428128 -5.477719 -8.799093 7.264849 17.503246 -6.809489 -6.846208 16.094025 24.483786 -7.084775 17.341183 20.311539 ]
[ 1.773366 0. 0.22042789 11.220362 3.4020965 14.487111 4.239182 0. 0. 0. 0. 7.264849 17.503246 0. 0. 16.094025 24.483786 0. 17.341183 20.311539 ]
[ 3.546732 -3.4378722 0.44085577 22.440723 6.804193 28.974222 8.478364 -6.8589864 -6.428128 -5.477719 -8.799093 14.529698 35.006493 -6.809489 -6.846208 32.18805 48.96757 -7.084775 34.682365 40.623077 ]


이제 람다 레이어를 사용하는 것이 명확해졌습니다. 다음 섹션에서는 람다 계층을 사용하는 모델을 저장하고 로드하는 방법을 설명합니다.

Lambda 계층을 사용하여 모델 저장 및 로드

 
모델을 저장하려면(람다 레이어 사용 여부와 상관없이) save() 방법이 사용됩니다. 메인 모델을 저장하는 데만 관심이 있다고 가정하면, 이를 저장하는 라인은 다음과 같습니다.

model.save("model.h5")


또한 다음을 사용하여 저장된 모델을 로드할 수도 있습니다. load_model() 방법은 다음 줄과 같습니다.

loaded_model = tensorflow.keras.models.load_model("model.h5")


모델이 성공적으로 로드되기를 바랍니다. 불행히도 Keras에는 다음과 같은 문제가 발생할 수 있는 몇 가지 문제가 있습니다. SystemError: unknown opcode 람다 레이어로 모델을 로드하는 동안. Python 버전을 사용하여 모델을 빌드하고 이를 다른 버전에서 사용하기 때문일 수 있습니다. 다음 섹션에서 해결책을 논의하겠습니다.

Lambda 계층을 사용하여 모델을 로드하는 동안 시스템 오류 해결

 
이 문제를 해결하기 위해 위에서 설명한 방식으로 모델을 저장하지 않을 것입니다. 대신, 다음을 사용하여 모델 가중치를 저장하겠습니다. save_weights() 방법.

이제 가중치만 저장했습니다. 모델 아키텍처는 어떻습니까? 모델 아키텍처는 코드를 사용하여 다시 생성됩니다. 모델 아키텍처를 JSON 파일로 저장한 다음 다시 로드하면 어떨까요? 그 이유는 아키텍처를 로드한 후에도 오류가 지속되기 때문입니다.

요약하자면, 훈련된 모델 가중치가 저장되고, 모델 아키텍처가 코드를 사용하여 재현되고, 마지막으로 가중치가 해당 아키텍처에 로드됩니다.

모델의 가중치는 다음 줄을 사용하여 저장할 수 있습니다.

model.save_weights('model_weights.h5')


다음은 모델 아키텍처를 재현하는 코드입니다. 그만큼 model 훈련되지는 않지만 저장된 가중치가 다시 할당됩니다.

input_layer = tensorflow.keras.layers.Input(shape=(784), name="input_layer") dense_layer_1 = tensorflow.keras.layers.Dense(units=500, name="dense_layer_1")(input_layer)
activ_layer_1 = tensorflow.keras.layers.ReLU(name="relu_layer_1")(dense_layer_1) dense_layer_2 = tensorflow.keras.layers.Dense(units=250, name="dense_layer_2")(activ_layer_1)
activ_layer_2 = tensorflow.keras.layers.ReLU(name="relu_layer_2")(dense_layer_2) dense_layer_3 = tensorflow.keras.layers.Dense(units=20, name="dense_layer_3")(activ_layer_2)
activ_layer_3 = tensorflow.keras.layers.ReLU(name="relu_layer_3")(dense_layer_3) def custom_layer(tensor): tensor1 = tensor[0] tensor2 = tensor[1] epsilon = tensorflow.keras.backend.random_normal(shape=tensorflow.keras.backend.shape(tensor1), mean=0.0, stddev=1.0) random_sample = tensor1 + tensorflow.keras.backend.exp(tensor2/2) * epsilon return random_sample lambda_layer = tensorflow.keras.layers.Lambda(custom_layer, name="lambda_layer")([dense_layer_3, activ_layer_3]) dense_layer_4 = tensorflow.keras.layers.Dense(units=10, name="dense_layer_4")(lambda_layer)
after_lambda_model = tensorflow.keras.models.Model(input_layer, dense_layer_4, name="after_lambda_model") output_layer = tensorflow.keras.layers.Softmax(name="output_layer")(dense_layer_4) model = tensorflow.keras.models.Model(input_layer, output_layer, name="model") model.compile(optimizer=tensorflow.keras.optimizers.Adam(lr=0.0005), loss="categorical_crossentropy")


저장된 가중치를 로드하는 방법은 다음과 같습니다. load_weights() 방법을 적용하고 재현된 아키텍처에 할당됩니다.

model.load_weights('model_weights.h5')


결론

 
이 튜토리얼에서는 Lambda Keras의 사전 정의된 레이어에서 지원되지 않는 작업을 수행하는 사용자 정의 레이어를 생성하는 레이어입니다. 생성자는 Lambda 클래스는 레이어의 작동 방식을 지정하는 함수를 허용하고, 함수는 레이어가 호출되는 텐서를 허용합니다. 함수 내에서 원하는 작업을 수행한 다음 수정된 텐서를 반환할 수 있습니다.

Keras에는 람다 계층을 사용하는 모델을 로드하는 데 문제가 있지만, 훈련된 모델 가중치를 저장하고, 코드를 사용하여 모델 아키텍처를 재현하고, 이 아키텍처에 가중치를 로드하여 이 문제를 해결하는 방법도 살펴보았습니다.

 
바이오 : 아흐메드 갓 그의 B.Sc. 2015 년 2015 월 이집트 메누 피아 대학교 컴퓨터 및 정보 학부 (FCI)에서 정보 기술 분야에서 우등 학위를 받았습니다. 교수진에서 2016 위를 차지한 그는 이집트에서 조교로 일하도록 추천 받았습니다. XNUMX 년과 XNUMX 년에는 교수진에서 조교 및 연구원으로 일하기 위해 연구소를 설립했습니다. 그의 현재 연구 관심 분야는 딥 러닝, 머신 러닝, 인공 지능, 디지털 신호 처리 및 컴퓨터 비전입니다.

실물. 허가를 받아 다시 게시했습니다.

관련 :

출처: https://www.kdnuggets.com/2021/01/working-lambda-layer-keras.html

spot_img

최신 인텔리전스

spot_img