Я новичок в тензорном потоке, и я пытаюсь создать простой авто-кодер для изображений, чтобы обнаружить аномалии. Во-первых, я создал простой авто-кодер, используя изображения собак, теперь я хочу использовать эту модель, чтобы восстановить мои тестовые изображения и сравнить результат. используя некоторые метрики. Так, как я могу сделать это в тензорном потоке (потому что я новичок в тензорном потоке) (я нашел ту же идею, реализованную в числовых наборах данных, а также в наборе данных MNIST). это мой код:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import LearningRateScheduler
BATCH_SIZE = 256
EPOCHS = 2
train_datagen = ImageDataGenerator(rescale=1./255)
train_batches = train_datagen.flow_from_directory('C:/MyPath/PetImages1',
target_size=(64,64), shuffle=True, class_mode='input', batch_size=BATCH_SIZE)
input_img = Input(shape=(64, 64, 3))
x = Conv2D(48, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(96, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(192, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
encoded = Conv2D(32, (1, 1), activation='relu', padding='same')(x)
latentSize = (8,8,32)
# DECODER
direct_input = Input(shape=latentSize)
x = Conv2D(192, (1, 1), activation='relu', padding='same')(direct_input)
x = UpSampling2D((2, 2))(x)
x = Conv2D(192, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(96, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(48, (3, 3), activation='relu', padding='same')(x)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)
# COMPILE
encoder = Model(input_img, encoded)
decoder = Model(direct_input, decoded)
autoencoder = Model(input_img, decoder(encoded))
autoencoder.compile(optimizer='Adam', loss='binary_crossentropy')
autoencoder.save_weights('autoencoder_DogsAuto.h5')
history=autoencoder.fit_generator(train_batches,steps_per_epoch=10,epochs =
EPOCHS)
#Images for tests
testGene = train_datagen.flow_from_directory('C:/PetImages/',
target_size=(64,64), shuffle=True, class_mode='input',
batch_size=BATCH_SIZE)
restored = autoencoder.predict_generator(testGene,
steps=testGene.n/BATCH_SIZE)
image_height=64
image_width=64
image_channels=3
x_train = np.zeros((0, image_height, image_width, image_channels), dtype=float)
for x, _ in train_batches :
if train_batches.total_batches_seen > train_batches.n/BATCH_SIZE:
break
else:
x_train = np.r_[x_train,x]
pred=autoencoder.predict(train_batches, steps=train_batches.n/BATCH_SIZE)
from sklearn import metrics
score1=np.sqrt(metrics.mean_squared_error(pred,x_train ))
print(score1)
И я получил эту ошибку:
Traceback (последний вызов был последним): файл "c: \ autoencoder_anomaly.py", строка 196, в файле score1 = np.sqrt (metrics.mean_squared_error (pred, x_train)) "C: \ Users \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sklearn \ metrics_regression.py", строка 252, в файле mean_squared_error y_true, y_pred, multioutput) Файл "C: \ Users \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sklearn \ metrics_regression.py", строка 84, в _check_reg_targets check_consistent_length ( y_true, y_pred)
ValueError: Найдены входные переменные с непоследовательным количеством выборок: [6, 0] Обратите внимание, что я использую только 6 изображений. Так, как я могу вычислить ошибку восстановленного изображения, используя метрики и Модель автоэнкодера на тензорном потоке?