pima indians diabetes dataset का उपयोग करके मैं केरास का उपयोग करके एक सटीक मॉडल बनाने की कोशिश कर रहा हूं। मैं निम्नलिखित कोड लिखा है:एक साधारण फ़ीड अग्रेषित नेटवर्क पर अधिक से अधिक से बचने के लिए कैसे करें
# Visualize training history
from keras import callbacks
from keras.layers import Dropout
tb = callbacks.TensorBoard(log_dir='/.logs', histogram_freq=10, batch_size=32,
write_graph=True, write_grads=True, write_images=False,
embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None)
# Visualize training history
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
import numpy
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:, 0:8]
Y = dataset[:, 8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu', name='first_input'))
model.add(Dense(500, activation='tanh', name='first_hidden'))
model.add(Dropout(0.5, name='dropout_1'))
model.add(Dense(8, activation='relu', name='second_hidden'))
model.add(Dense(1, activation='sigmoid', name='output_layer'))
# Compile model
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
# Fit the model
history = model.fit(X, Y, validation_split=0.33, epochs=1000, batch_size=10, verbose=0, callbacks=[tb])
# 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()
कई की कोशिश करता के बाद, मैं आदेश overfitting से बचने के लिए छोड़ने वालों की परतों को जोड़ दिया है, लेकिन कोई भाग्य के साथ। निम्नलिखित ग्राफ से पता चलता है कि सत्यापन बिंदु और प्रशिक्षण हानि एक बिंदु पर अलग हो जाती है।
और क्या मैं इस नेटवर्क अनुकूलन करने के लिए कर सकता है?
अद्यतन: टिप्पणी के आधार पर मुझे मिल गया मैं कोड इसलिए की तरह बदलाव किया है:
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform', kernel_regularizer=regularizers.l2(0.01),
activity_regularizer=regularizers.l1(0.01), activation='relu',
name='first_input')) # added regularizers
model.add(Dense(8, activation='relu', name='first_hidden')) # reduced to 8 neurons
model.add(Dropout(0.5, name='dropout_1'))
model.add(Dense(5, activation='relu', name='second_hidden'))
model.add(Dense(1, activation='sigmoid', name='output_layer'))
यहाँ 500 अवधियों को
आप के लिए मेरी समाधान काम किया है? मुझे बताना, अगर आप को किसी भी अधिक मदद की ज़रूरत हो। – CoolPenguin
मैं प्रत्येक घने परत के बाद एक ड्रॉपआउट परत की अनुशंसा करता हूं। –
मैंने यह किया, लाइनें और अधिक चपेट में आ गईं ... :( –