ディープラーニングモデルの精度とデータセットの出力形式を理解する上で助けが必要です。 https://machinelearningmastery.com/deep-learning-with-python2/ディープラーニングモデルの精度を理解する
私はピマ・インディアン・糖尿病データセット、およびアイリスの花のデータセットの例をした:
は、私がこのサイトをもとに、深い学習のためのいくつかの訓練をしました。 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-インドの糖尿病データセットのスクリプトの例を使用して、この新しいデータセットを訓練し、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'))
のニューロン層の値とY変数と210
結果農産物精度= Iは、文字列(〜のG)の整数(1〜7)に元々あるこのデータセットの出力列を変更しそして
32.71パーセントとアイリス花のための例のスクリプトを使用しそれに
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/
私が修正した新しいガラスのデータセットを訓練するスクリプト。
今回の結果は、この
ベースラインのようになる:68.42パーセント(3.03パーセント)記事から
、68%および3%が平均モデルの精度の標準偏差を意味します。
私の第1の質問は、整数またはアルファベットを出力列として使用するときです。整数から文字列/アルファベットへの出力を変更するようなデータセットで調整したときのこの種の正確な結果は共通ですか?
私の2番目の質問は、どのレイヤーにどの層のニューロンを置く必要があるかを知る方法です。それは、私がモデルをコンパイルするときに使用するバックエンド(TensorflowまたはTheano)に関連していますか?
ありがとうございます。
整数から文字への出力の変更を実行する唯一の違いはありますか?あなたのコードから、層の数を変更したようです。 – ginge
私は再確認し、ニューロンの数を除いて層の数を変更していないことを確認しました。私は2つの異なるスクリプトを使用するので、層の数の違いを見るかもしれません。 1スクリプトはpima-indian-diabetesチュートリアルの例で、出力は整数(1と0)で、スクリプトは3層のように使用します。他のスクリプトは、出力が文字列であるiris-flowerチュートリアルの例です。スクリプトは2つのレイヤーを使用します。 – Ling
ご質問のとおり、3番目のコードスニペットでは、32.71%の精度を持つ3つのレイヤーを持つSequentialモデルを作成します。あなたの4番目のスニペットでは、2つのレイヤーを持つSequentialモデルを使用すると、68.42%の精度が得られます。これは本当ですか、スニペット間に何かがありませんか? – ginge