이 게시물 은 내가 달성하려는 것이 불가능하다는 것을 나타내는 것 같습니다. 그러나 나는 이것을 확신하지 못합니다. 내가 이미 한 일을 감안할 때 왜 내가하고 싶은 일을 달성 할 수 없는지 알 수 없습니다 ...
하나는 모양 (480, 720, 3)의 이미지가 있고 다른 하나는 모양 (540, 960, 3)의 이미지가있는 두 개의 이미지 데이터 세트가 있습니다.
다음 코드를 사용하여 모델을 초기화했습니다.
input = Input(shape=(480, 720, 3), name='image_input')
initial_model = VGG16(weights='imagenet', include_top=False)
for layer in initial_model.layers:
layer.trainable = False
x = Flatten()(initial_model(input))
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(1000, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.5)(x)
x = Dense(14, activation='linear')(x)
model = Model(inputs=input, outputs=x)
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
이전 데이터 세트에서이 모델을 학습 했으므로 입력 텐서 레이어를 제거하고 후자의 데이터 세트의 이미지 크기와 일치하는 모양의 새 입력 텐서로 모델을 추가하고 싶습니다.
model = load_model('path/to/my/trained/model.h5')
old_input = model.pop(0)
new_input = Input(shape=(540, 960, 3), name='image_input')
x = model(new_input)
m = Model(inputs=new_input, outputs=x)
m.save('transfer_model.h5')
이 오류가 발생합니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2506, in save
save_model(self, filepath, overwrite, include_optimizer)
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/models.py", line 106, in save_model
'config': model.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2322, in get_config
layer_config = layer.get_config()
File "/home/aicg2/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 2370, in get_config
new_node_index = node_conversion_map[node_key]
KeyError: u'image_input_ib-0'
내가 연결 한 게시물에서 maz는 모델의 입력 레이어를 변경하지 못하게하는 치수 불일치가 있다고 말합니다.이 경우라면 (480, 720, 3) 입력 레이어를 앞에 놓는 방법은 무엇입니까? (224, 224, 3) 이미지를 기대하는 VGG16 모델의
필자는 이전 모델의 출력 이이 게시물 에서 fchollet이 말한 내용에 따라 내가 제공하는 것과 다른 것을 기대하고 있다는 것이 더 큰 문제라고 생각합니다 . 나는 문법적으로 혼란스러워하지만 전체 x = Layer()(x)
세그먼트가 입력-> 출력에서 레이어별로 조각을 구성하고 있으며 단순히 다른 입력을 앞에 던지면 깨뜨릴 것이라고 생각합니다.
나는 정말로 모른다.
누군가 내가 내가하려는 일을 성취하는 방법을 가르쳐 줄 수 있습니까, 아니면 가능하지 않은 경우 왜 그렇지 않은지 설명해 주시겠습니까?