В настоящее время я тренирую свои данные, используя нейронную сеть и используя функцию подгонки.
history=model.fit(X, encoded_Y, batch_size=50, nb_epoch=500, validation_split = 0.2, verbose=1)
Теперь я использовал validation_split как 20%. Я понял, что мои тренировочные данные составят 80%, а данные тестирования - 20%. Я запутался, как эти данные обрабатываются на бэкэнде. Это похоже на то, что 80% лучших образцов будут отобраны для обучения и менее 20% для тестирования, или образцы будут случайно выбраны из промежуточного периода? Если я хочу предоставить отдельные данные для обучения и тестирования, как мне это сделать с помощью fit () ??
Кроме того, моя вторая задача - как проверить, хорошо ли соответствуют данные модели? Из результатов видно, что точность обучения составляет около 90%, а точность проверки - около 55%. Означает ли это, что это случай чрезмерной или недостаточной подгонки?
Мой последний вопрос: что оценивает доходность? Документ говорит, что возвращает потери, но я уже получаю потери и точность в течение каждой эпохи (как возвращение соответствия () (в истории). Что показывает точность и результат, полученный оценкой? Если точность, возвращаемая оценкой, возвращает 90%, могу ли я сказать, что мои данные хорошо соответствуют, независимо от того, какой была индивидуальная точность и потери для каждой эпохи?
Ниже мой код:
import numpy
import pandas
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from keras.utils import np_utils
from sklearn.model_selection import KFold
from sklearn.metrics import confusion_matrix
import itertools
seed = 7
numpy.random.seed(seed)
dataframe = pandas.read_csv("INPUTFILE.csv", skiprows=range(0, 0))
dataset = dataframe.values
X = dataset[:,0:50].astype(float) # number of cols-1
Y = dataset[:,50]
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
encoded_Y = np_utils.to_categorical(encoded_Y)
print("encoded_Y=", encoded_Y)
# baseline model
def create_baseline():
# create model
model = Sequential()
model.add(Dense(5, input_dim=5, kernel_initializer='normal', activation='relu'))
model.add(Dense(5, kernel_initializer='normal', activation='relu'))
#model.add(Dense(2, kernel_initializer='normal', activation='sigmoid'))
model.add(Dense(2, kernel_initializer='normal', activation='softmax'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # for binayr classification
#model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # for multi class
return model
model=create_baseline();
history=model.fit(X, encoded_Y, batch_size=50, nb_epoch=500, validation_split = 0.2, verbose=1)
print(history.history.keys())
# list all data in history
print(history.history.keys())
# summarize history for accuracy
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
pre_cls=model.predict_classes(X)
cm1 = confusion_matrix(encoder.transform(Y),pre_cls)
print('Confusion Matrix : \n')
print(cm1)
score, acc = model.evaluate(X,encoded_Y)
print('Test score:', score)
print('Test accuracy:', acc)