Я пытаюсь построить простой ANN, чтобы узнать, как определить, похожи ли эти два изображения или нет, используя два уравнения расстояния. Итак, вот как я все устроил. Я создал расстояние между 3 изображениями (1, якорь, 2 положительный образец, 3 отрицательный образец), а затем создал два разных измерения расстояния. 1 с использованием функций ResNet, а другой с использованием функций свиней Затем два измерения расстояния сохраняются с двумя путями изображения, а также с правильной меткой (0/1) 0 = одинаковые 1 = не одинаковые.
Теперь я пытаюсь построить свой ANN, чтобы узнать разницу между двумя значениями и посмотреть, позволит ли это мне увидеть, если два изображения похожи. Но ничего не происходит, когда я тренирую ANN. Я думаю, что есть две возможности.
1: я неправильно настроил Энн.
2: нет соединения вообще.
Пожалуйста, помогите мне понять, в чем проблема:
Вот мой код:
# Load the Pandas libraries with alias 'pd'
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
# fix random seed for reproducibility
np.random.seed(7)
import csv
data = pd.read_csv("encoding.csv")
print(data.columns)
X = data[['resnet', 'hog','label']]
x = X[['resnet', 'hog']]
y = X[['label']]
model = Sequential()
#get number of columns in training data
n_cols = x.shape[1]
#add model layers
model.add(Dense(16, activation='relu', input_shape=(n_cols,)))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation= 'softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x, y,
epochs=30,
batch_size=32,
validation_split=0.10)
Прямо сейчас все, что он делает, это снова и снова:
167/167 [==============================] - 0s 3ms/step - loss: 8.0189 - acc: 0.4970 - val_loss: 7.5517 - val_acc: 0.5263
Вот файл CSV, который я использую:
EDIT
Таким образом, я немного изменил настройку, и теперь она показывает точность до 73%. Но затем он отскакивает и заканчивается на 40%, что это значит?
Вот новая модель:
model = Sequential()
#get number of columns in training data
n_cols = x.shape[1]
model.add(Dense(256, activation='relu', input_shape=(n_cols,)))
model.add(BatchNormalization())
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(1, activation= 'sigmoid'))
#sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
#model.compile(loss = "binary_crossentropy", optimizer = sgd, metrics=['accuracy'])
model.compile(loss = "binary_crossentropy", optimizer = 'rmsprop', metrics=['accuracy'])
#model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x, y,
epochs=100,
batch_size=64,
validation_split=0.10)