Как изменить форму ввода в keras - PullRequest
0 голосов
/ 07 августа 2020

Я загрузил файл .h5 с GitHub и хотел сделать из него прогнозы. Я выполнил следующий код:

from keras.models import load_model
from PIL import Image
import numpy as np

im = Image.open('img.jpg')
img = np.array(im)

model = load_model('model_weight.h5')

a = model.predict(img)
print(a)

и получил следующую ошибку:

ValueError: Input 0 of layer dense_1 is incompatible with the layer: expected axis -1 of input shape to have value 4096 but received input with shape [None, 300, 3]

Вот сводка модели:

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            [(None, 4096)]       0                                            
__________________________________________________________________________________________________
input_2 (InputLayer)            [(None, 34)]         0                                            
__________________________________________________________________________________________________
dropout_1 (Dropout)             (None, 4096)         0           input_1[0][0]                    
__________________________________________________________________________________________________
embedding_1 (Embedding)         (None, 34, 256)      1940224     input_2[0][0]                    
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 128)          524416      dropout_1[0][0]                  
__________________________________________________________________________________________________
lstm_1 (LSTM)                   (None, 34, 256)      525312      embedding_1[0][0]                
__________________________________________________________________________________________________
repeat_vector_1 (RepeatVector)  (None, 34, 128)      0           dense_1[0][0]                    
__________________________________________________________________________________________________
time_distributed_1 (TimeDistrib (None, 34, 128)      32896       lstm_1[0][0]                     
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 34, 256)      0           repeat_vector_1[0][0]            
                                                                 time_distributed_1[0][0]         
__________________________________________________________________________________________________
lstm_2 (LSTM)                   (None, 1000)         5028000     concatenate_1[0][0]              
__________________________________________________________________________________________________
dense_3 (Dense)                 (None, 7579)         7586579     lstm_2[0][0]                     
==================================================================================================
Total params: 15,637,427
Trainable params: 15,637,427
Non-trainable params: 0
__________________________________________________________________________________________________
WARNING:tensorflow:Model was constructed with shape (None, 4096) for input Tensor("input_1:0", shape=(None, 4096), dtype=float32), but it was called on an input with incompatible shape (None, 300, 3).

Я знаю, что у меня есть чтобы изменить его, но не знаю, как это сделать. Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 07 августа 2020

Предполагая, что модель принимает квадратное изображение (где ширина и высота равны), входные изображения должны иметь размер (64, 64) и иметь 1 канал. Вы можете использовать следующие шаги, чтобы использовать модель для прогнозирования с изображениями

  1. преобразовать изображение из RGB в оттенки серого
  2. Измените размер изображения на (64, 64)
  3. Измените форму изображения на (1, 4096)
  4. Передайте его в сеть.

from keras.models import load_model
from PIL import Image
import numpy as np

im = Image.open('img.jpg').convert('L') # Grayscale conversion
im = im.resize((64, 64)) # Resizing to neccessary size. 
img = np.array(im).reshape(1, 4096)  

model = load_model('model_weight.h5')

sentence = np.zeros((1, 34));
sentence = model.predict([img, sentence])
print(sentence)

Генерация предложения


stop_token_index = 0;  

i = 0;

sentence = np.zeros((1, 34));
while i < sentence.shape[-1]:
    next_word = np.argmax(model.predict([img, sentence]).squeeze())
    if next_word == stop_token_index:
        break
    sentence[0][i] = next_word
    i += 1
print(sentence)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...