keras 의 각종 네트워크 구조 각 층 의 이름 방식 보기

예 를 들다
base_model = ResNet50(weights=‘imagenet', include_top=True)
print(base_model.summary())
이 결 과 를 얻다

추가 지식:keras 사용,loadmodel()시 NameError:name'***'가 정의 되 지 않 음
구조 모델 에 서 는 람 다()와 같은 사용자 정의 층 을 사 용 했 기 때 문 입 니 다.

#          
def exponent_neg_manhattan_distance(sent_left, sent_middle, sent_right):
  '''                           '''
  return ((K.exp(-K.sum(K.abs(sent_left - sent_middle), axis=1, keepdims=True)) - K.exp(-K.sum(K.abs(sent_left - sent_right), axis=1, keepdims=True))) + 1) / 2
 
def bilstm_siamese_model():
  '''      '''
  #       
  embedding_layer = Embedding(VOCAB_SIZE + 1,
                EMBEDDING_DIM,
                weights=[embedding_matrix],
                input_length=MAX_LENGTH,
                trainable=True, #   False
                mask_zero=True)
  #   
  left_input = Input(shape=(MAX_LENGTH,), dtype='float32', name="left_x") #(?, 25)
  middle_input = Input(shape=(MAX_LENGTH,), dtype='float32', name="middle_x") #(?, 25)
  right_input = Input(shape=(MAX_LENGTH,), dtype='float32', name='right_x')
  #   
  encoded_left = embedding_layer(left_input) #(?, 25, 300)
  encoded_middle = embedding_layer(middle_input) #(?, 25, 300)
  encoded_right = embedding_layer(right_input)
  # print(encoded_left)
  #    
  shared_lstm = create_base_network(input_shape=(MAX_LENGTH, EMBEDDING_DIM))
  left_output = shared_lstm(encoded_left)
  middle_output = shared_lstm(encoded_middle)
  right_output = shared_lstm(encoded_right)
 
  #          
  distance = Lambda(lambda x: exponent_neg_manhattan_distance(x[0], x[1], x[2]),output_shape=lambda x: (x[0][0], 1))([left_output, middle_output, right_output]) #   lambda          ,x[0][0]
  print('distance',distance)
  model = Model([left_input, middle_input, right_input], distance)
  model.compile(loss='binary_crossentropy',
         optimizer='nadam',
         metrics=['accuracy'])
  model.summary()
  return model
이미 exponent 를 정 의 했 지만neg_manhattan_distance(),하지만 loadmodel()은 여전히 NameError:name'exponentneg_manhattan_distance' is not defined
해결 방법:

loadmodel 을 추가 할 때 customobjects 매개 변수 면 됩 니 다.즉,
model = load_model(model_path,custom_objects={'exponent_neg_manhattan_distance': exponent_neg_manhattan_distance})\#사용자 정의 층 에 대한 설명
주의:구 글 검색 bug 는 baidu 검색 보다 질 이 훨씬 높 습 니 다.
이 편 은 keras 의 각종 네트워크 구조 각 층 의 이름 방식 을 살 펴 보 는 것 이 바로 소 편 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 실 수 있 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기