Keras에서 와인 분류
                                            
                                                
                                                
                                                
                                                
                                                
                                                 10690 단어  파이썬KerasMachineLearning
                    
시작하기
(주의 저자는 이 분야를 확실히 전문으로 하고 있는 것은 아니기 때문에, 설명의 부족이나 잘못도 있을지도 모릅니다.)
scikit-learn에서 입수할 수 있는 와인의 종류(3종)와 각각 13개의 특징량이 정리된 데이터 세트를 기계 학습으로 분류하기 위한 프로그램입니다. Udemy의 다음 강좌에서는 Chainer 구현입니다만, 이 페이지에서는 Keras로 구현해 보았습니다.
【키카가쿠류】현장에서 사용할 수 있는 Chainer에 의한 딥 러닝 입문
 htps //w w. 우데 my. 코 m / 이렇게 r세 / 키카가 쿠 짱 r / ぇ 아 rn / ぇ c 얽힌 / 11004080 # 오 ぇ r ゔ 아 w
프로그램을 제대로 검토한 것은 아니기 때문에 조금 이상한 부분이 있을지도 모릅니다. 이 경우 연락 주시면 감사하겠습니다.
이번에 하는 일의 개략도를 아래에 나타냅니다. 신경망은 숨겨진 층 하나입니다.
 
또, 이번에는 마지막에 최적화 함수를 바꾸어 보고 어떤 변화가 있을지도 정리했습니다.
 손실 함수 및 최적화 함수
손실값은 신경망이 예측한 값과 정답의 오차이며, 그 오차를 구하는 함수가 손실 함수입니다. 프로그램의 loss='categorical_crossentropy'에서 손실 함수를 정의합니다. 이전 기사에서는 회귀였기 때문에 loss='mean_squared_error'라고 했습니다. 이와 같이 문제 설정에 의해 손실 함수를 변경합니다.
손실 함수의 값이 감소하도록 가중치를 변경하기 위해 최적화 함수를 사용합니다. 프로그램 중에는 opt = keras.optimizers.SGD(lr=0.08)로 정의하고 있습니다. 손실 함수와 마찬가지로 많은 종류가 있고 학습이 잘 되지 않는 경우에는 변경해 보면 됩니다.
신경망의 학습에서는 손실값이 작아지도록 가중치를 조정해 갑니다. 손실 함수·최적화 함수의 설명에 대해서는 「소개」에서 말한 강좌에서 자세하게 해설되고 있습니다.
 프로그램
GitHub에 올립니다.
 htps : // 기주 b. 코 m / 모리이 tkys / 케라스 ぃ 네 C ぁし fy
KerasWineClassify.ipynbfrom sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import matplotlib.pyplot as plt
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
dataset_mean = df.mean()
#pd.DataFrame(wine.target)
# Centering
df_c = df-df.mean()
# Normalizing
df_norm = (df_c - df_c.mean()) / (df_c.max() - df_c.min())
s = 13
nb_classes = 3
# Split data
from keras.utils import np_utils
train_X, test_X, train_Y, test_Y = train_test_split(df_norm, wine.target[:], test_size = 0.25)
train_Y1 = np_utils.to_categorical(train_Y,nb_classes)
test_Y1 = np_utils.to_categorical(test_Y,nb_classes)
# Build model
from keras.optimizers import Adam, RMSprop, SGD
model = Sequential()
model.add(Dense(128, input_shape=(s, ), use_bias=False, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
model.add(Dense(nb_classes, activation='softmax'))
#opt = keras.optimizers.Adam(lr=0.08)
#opt = keras.optimizers.RMSprop(lr=0.08)
opt = keras.optimizers.SGD(lr=0.08)
model.compile(optimizer=opt,
      loss='categorical_crossentropy',
      metrics=['mae', 'acc'])
# Start training
history = model.fit(train_X, train_Y1, epochs=50, batch_size=20, verbose=1, validation_data=(test_X,test_Y1))
print(model.summary())
open("model", "w").write(model.to_json())
model.save_weights('param.hdf5')
weights = model.get_weights()
# plot val_loss 損失値の推移をプロット
plt.plot(history.history['val_loss'])
plt.plot(history.history['val_acc'])
plt.show()
 결과
 
위의 그래프와 같이, val_acc인 오렌지의 그래프가 1에 가까워졌기 때문에 학습은 성공했다고 생각합니다. 특히 SGD가 가장 안정적인 곡선으로 되어 있다고 생각합니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Keras에서 와인 분류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/moriitkys/items/2ac240437a31131108c7
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
손실값은 신경망이 예측한 값과 정답의 오차이며, 그 오차를 구하는 함수가 손실 함수입니다. 프로그램의 loss='categorical_crossentropy'에서 손실 함수를 정의합니다. 이전 기사에서는 회귀였기 때문에 loss='mean_squared_error'라고 했습니다. 이와 같이 문제 설정에 의해 손실 함수를 변경합니다.
손실 함수의 값이 감소하도록 가중치를 변경하기 위해 최적화 함수를 사용합니다. 프로그램 중에는 opt = keras.optimizers.SGD(lr=0.08)로 정의하고 있습니다. 손실 함수와 마찬가지로 많은 종류가 있고 학습이 잘 되지 않는 경우에는 변경해 보면 됩니다.
신경망의 학습에서는 손실값이 작아지도록 가중치를 조정해 갑니다. 손실 함수·최적화 함수의 설명에 대해서는 「소개」에서 말한 강좌에서 자세하게 해설되고 있습니다.
프로그램
GitHub에 올립니다.
 htps : // 기주 b. 코 m / 모리이 tkys / 케라스 ぃ 네 C ぁし fy
KerasWineClassify.ipynbfrom sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import matplotlib.pyplot as plt
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
dataset_mean = df.mean()
#pd.DataFrame(wine.target)
# Centering
df_c = df-df.mean()
# Normalizing
df_norm = (df_c - df_c.mean()) / (df_c.max() - df_c.min())
s = 13
nb_classes = 3
# Split data
from keras.utils import np_utils
train_X, test_X, train_Y, test_Y = train_test_split(df_norm, wine.target[:], test_size = 0.25)
train_Y1 = np_utils.to_categorical(train_Y,nb_classes)
test_Y1 = np_utils.to_categorical(test_Y,nb_classes)
# Build model
from keras.optimizers import Adam, RMSprop, SGD
model = Sequential()
model.add(Dense(128, input_shape=(s, ), use_bias=False, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
model.add(Dense(nb_classes, activation='softmax'))
#opt = keras.optimizers.Adam(lr=0.08)
#opt = keras.optimizers.RMSprop(lr=0.08)
opt = keras.optimizers.SGD(lr=0.08)
model.compile(optimizer=opt,
      loss='categorical_crossentropy',
      metrics=['mae', 'acc'])
# Start training
history = model.fit(train_X, train_Y1, epochs=50, batch_size=20, verbose=1, validation_data=(test_X,test_Y1))
print(model.summary())
open("model", "w").write(model.to_json())
model.save_weights('param.hdf5')
weights = model.get_weights()
# plot val_loss 損失値の推移をプロット
plt.plot(history.history['val_loss'])
plt.plot(history.history['val_acc'])
plt.show()
 결과
 
위의 그래프와 같이, val_acc인 오렌지의 그래프가 1에 가까워졌기 때문에 학습은 성공했다고 생각합니다. 특히 SGD가 가장 안정적인 곡선으로 되어 있다고 생각합니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Keras에서 와인 분류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/moriitkys/items/2ac240437a31131108c7
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
import matplotlib.pyplot as plt
wine = load_wine()
df = pd.DataFrame(wine.data, columns=wine.feature_names)
dataset_mean = df.mean()
#pd.DataFrame(wine.target)
# Centering
df_c = df-df.mean()
# Normalizing
df_norm = (df_c - df_c.mean()) / (df_c.max() - df_c.min())
s = 13
nb_classes = 3
# Split data
from keras.utils import np_utils
train_X, test_X, train_Y, test_Y = train_test_split(df_norm, wine.target[:], test_size = 0.25)
train_Y1 = np_utils.to_categorical(train_Y,nb_classes)
test_Y1 = np_utils.to_categorical(test_Y,nb_classes)
# Build model
from keras.optimizers import Adam, RMSprop, SGD
model = Sequential()
model.add(Dense(128, input_shape=(s, ), use_bias=False, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
#model.add(Dense(128, activation='relu'))
model.add(Dense(nb_classes, activation='softmax'))
#opt = keras.optimizers.Adam(lr=0.08)
#opt = keras.optimizers.RMSprop(lr=0.08)
opt = keras.optimizers.SGD(lr=0.08)
model.compile(optimizer=opt,
      loss='categorical_crossentropy',
      metrics=['mae', 'acc'])
# Start training
history = model.fit(train_X, train_Y1, epochs=50, batch_size=20, verbose=1, validation_data=(test_X,test_Y1))
print(model.summary())
open("model", "w").write(model.to_json())
model.save_weights('param.hdf5')
weights = model.get_weights()
# plot val_loss 損失値の推移をプロット
plt.plot(history.history['val_loss'])
plt.plot(history.history['val_acc'])
plt.show()

위의 그래프와 같이, val_acc인 오렌지의 그래프가 1에 가까워졌기 때문에 학습은 성공했다고 생각합니다. 특히 SGD가 가장 안정적인 곡선으로 되어 있다고 생각합니다.
Reference
이 문제에 관하여(Keras에서 와인 분류), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moriitkys/items/2ac240437a31131108c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)