Мне нужна помощь в понимании точности и формата выходных данных для модели Deep Learning.Понимание точности модели Deep Learning
я сделал некоторое обучение для глубокого обучения, основанное на этом сайте: https://machinelearningmastery.com/deep-learning-with-python2/
Я сделал пример для Пима-индийского сахарного набора данных, и ирис цветка набора данных. Я тренирую свой компьютер для набора данных pima-indian-diabetes, используя скрипт из этого: http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/
Затем я тренирую свой компьютер для набора диафрагмы с использованием нижеприведенного сценария.
# import package
import numpy
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score, KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
from keras.callbacks import ModelCheckpoint
# fix random seed for reproductibility
seed = 7
numpy.random.seed(seed)
# load dataset
dataframe = read_csv("iris_2.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]
# encode class value as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
### one-hot encoder ###
dummy_y = np_utils.to_categorical(encoded_Y)
# define base model
def baseline_model():
# create model
model = Sequential()
model.add(Dense(4, input_dim=4, init='normal', activation='relu'))
model.add(Dense(3, init='normal', activation='sigmoid'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model_json = model.to_json()
with open("iris.json", "w") as json_file:
json_file.write(model_json)
model.save_weights('iris.h5')
return model
estimator = KerasClassifier(build_fn=baseline_model, nb_epoch=1000, batch_size=6, verbose=0)
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, dummy_y, cv=kfold)
print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
Все работает отлично, пока я не решил попробовать на другой набор данных по этой ссылке: https://archive.ics.uci.edu/ml/datasets/Glass+Identification
В первый я тренируюсь этот новый набор данных, используя примеру PIME-индийского диабета DataSet сценария и изменить значение X и У переменной этого
dataset = numpy.loadtxt("glass.csv", delimiter=",")
X = dataset[:,0:10]
Y = dataset[:,10]
, а также значение для нейрона слоя к этому
model = Sequential()
model.add(Dense(10, input_dim=10, init='uniform', activation='relu'))
model.add(Dense(10, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
точность результата продукции = 32,71%
Затем я изменил выходной столбец этого набора данных, которое первоначально в целое число (1 ~ 7) в строку (а ~ г) и использовать сценарий в качестве примера для радужной оболочки-цветок Набор данных, делая некоторые модификации к нему
import numpy
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
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
seed = 7
numpy.random.seed(seed)
dataframe = read_csv("glass.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:10].astype(float)
Y = dataset[:,10]
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
def create_baseline():
model = Sequential()
model.add(Dense(10, input_dim=10, init='normal', activation='relu'))
model.add(Dense(1, init='normal', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model_json = model.to_json()
with open("glass.json", "w") as json_file:
json_file.write(model_json)
model.save_weights('glass.h5')
return model
estimator = KerasClassifier(build_fn=create_baseline, nb_epoch=1000, batch_size=10, verbose=0)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, encoded_Y, cv=kfold)
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
Я не использовал «dummy_y» переменной, обратитесь к этой обучающей программе: http://machinelearningmastery.com/binary-classification-tutorial-with-the-keras-deep-learning-library/
Я проверить, что набор данных с использованием алфавита, как выход и думать, что, возможно, я могу повторно использовать этот сценарий для подготовки нового набора данных стекла, который я модифицировал.
На этот раз результаты становятся как этот
Baseline: 68.42% (3.03%)
Из статьи, что 68% и 3% означает, что среднее и стандартное отклонение точности модели.
Мой первый вопрос: когда я использую целое или алфавит в качестве выходного столбца? и является ли такой результат точности распространенным, когда мы закаляемся с помощью набора данных, например, изменяя вывод из целого числа в строку/алфавит?
Мой второй вопрос: как узнать, сколько нейронов мне нужно положить для каждого слоя? Связано ли это с тем, какой бэкэнд я использую при компиляции модели (Tensorflow или Theano)?
Заранее спасибо.
Разница между двумя пробегами заключается в изменении выходов целых чисел на буквы? Из вашего кода кажется, что вы также изменили количество слоев – ginge
Я перепроверял и подтвердил, что я не изменил количество слоев, кроме числа нейронов. Вы можете увидеть разницу между количеством слоев, потому что я использую 2 разных сценария. 1, который является примером из урока pima-indian-diabetes, вывод находится в целочисленном (1 и 0), а сценарий использует как 3 слоя. Другой скрипт - это пример из учебника iris-flower, который выводится в строке. Скрипт использует 2 слоя. – Ling
Насколько я понимаю ваш вопрос, в вашем третьем фрагменте кода вы создаете модель Sequential с тремя уровнями, для которых вы получили точность 32.71%. В вашем четвертом фрагменте вы используете последовательную модель с 2 слоями и получаете точность 68,42%. Это правда или что-то не хватает между фрагментами? – ginge