官术网_书友最值得收藏!

How to do it...

  1. Import libraries as follows:
import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD

SEED = 2017
  1. Load the dataset:
data = pd.read_csv('Data/winequality-red.csv', sep=';')
y = data['quality']
X = data.drop(['quality'], axis=1)
  1. Split the dataset into training and testing:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=SEED)
  1. Normalize the input data:
scaler = StandardScaler().fit(X_train)
X_train = pd.DataFrame(scaler.transform(X_train))
X_test = pd.DataFrame(scaler.transform(X_test))
  1. Define the model and optimizer and compile:
model = Sequential()
model.add(Dense(1024, input_dim=X_train.shape[1], activation='relu'))
model.add(Dense(1024, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(512, activation='relu'))
# Output layer
model.add(Dense(1, activation='linear'))
# Set optimizer
opt = SGD()
# Compile model
model.compile(loss='mse', optimizer=opt, metrics=['accuracy'])
  1. Set the hyperparameters and train the model:
n_epochs = 500
batch_size = 256

history = model.fit(X_train.values, y_train, batch_size=batch_size, epochs=n_epochs, validation_split=0.2, verbose=0)
  1. Predict on the test set:
predictions = model.predict(X_test.values)
print('Test accuracy: {:f>2}%'.format(np.round(np.sum([y_test==predictions.flatten().round()])/y_test.shape[0]*100, 2)))
  1. Plot the training and validation accuracy:
plt.plot(np.arange(len(history.history['acc'])), history.history['acc'], label='training')
plt.plot(np.arange(len(history.history['val_acc'])), history.history['val_acc'], label='validation')
plt.title('Accuracy')
plt.xlabel('epochs')
plt.ylabel('accuracy ')
plt.legend(loc=0)
plt.show()

The following graph is obtained:

Figure 2.12: Training and validation accuracy
We should focus on the validation accuracy and use early stopping to stop the training after around 450 epochs. This results in the highest validation accuracy. in the sections  Improving generalization with regularization and A`dding dropout to prevent overfitting, we will introduce techniques to prevent overfitting. By using these techniques, we can create deeper models without overfitting on the training data.  
主站蜘蛛池模板: 武胜县| 巴彦县| 徐闻县| 涡阳县| 桂平市| 贵溪市| 固阳县| 红原县| 正定县| 云安县| 昔阳县| 灌阳县| 米林县| 安义县| 马尔康县| 连城县| 青神县| 甘孜县| 双江| 岐山县| 兴隆县| 安吉县| 福安市| 南开区| 阿合奇县| 中牟县| 宁陵县| 上虞市| 江华| 临城县| 吉木萨尔县| 关岭| 天水市| 康马县| 故城县| 正安县| 延津县| 紫云| 象山县| 仲巴县| 宁阳县|