Vamos a importar los datos de un archivo .csv y luego los dividiremos en tres conjuntos: Tren, Validación y Prueba. Los datos del tren se utilizarán para entrenar el modelo mientras que el modelo de validación se utilizará para probar la aptitud del modelo. Después de cada ejecución, los usuarios pueden hacer ajustes a los hiperparámetros como el número de capas en la red, el número de nodos por capa, el número de épocas, etc. Estos ajustes se utilizan principalmente sobre la base de ensayo y error, y las herramientas de visualización, como los gráficos dados por Matplotlib, ayudan a obtener los resultados deseados. El conjunto de pruebas no debe participar en el ejercicio de entrenamiento a nivel de parámetros o de hiperparámetros. En caso de que el usuario utilice intencionadamente o no los datos de la prueba con fines de entrenamiento, los datos de la prueba no podrán predecir con exactitud el poder de generalización del modelo.
El siguiente programa construye el Modelo de Aprendizaje Profundo para la Clasificación Binaria. Los datos se dividen en tres conjuntos:
- Juego de entrenamiento
- Juego de validación
- Juego de pruebas
El conjunto de datos originales se divide de tal manera que el 20% de todos los datos se asigna como un conjunto de prueba y el resto permanece como el conjunto de entrenamiento. El conjunto de trenes se divide de nuevo de tal manera que el 20% del conjunto de trenes se asigna como conjunto de validación y el resto se utiliza para el propósito de entrenamiento. De todo el conjunto de datos, el 64% se trata como el conjunto de entrenamiento, el 16% como el conjunto de validación y el 20% como el conjunto de pruebas. El conjunto de datos de entrenamiento se alimenta a las redes neuronales de tres capas; las dos primeras capas tienen cuatro nodos cada una y la capa de salida sólo un nodo. Los datos de pérdida y precisión del modelo para cada época se almacenan en el objeto de la historia.
1234567891011121314151617181920212223242526272829importar pandas como pdimport tensorflow como tffrom tensorflow import kerasfrom sklearn.model_selection import train_test_splitimport numpy como npimport matplotlib.pyplot como pltdf = pd. read_csv($0027C:\mlmolecular_activity.csv$0027)properties =list(df.columns.values)properties.remove($0027Activity$0027)print(properties)X = df[properties]y = df[$0027Activity$0027]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0. 2, random_state=1)X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=1)model = keras.Sequential([ keras.layers.Flatten(input_shape=(4,)), keras.layers.Dense(4, activation=tf.nn.relu), keras.layers. Densa(4, activation=tf.nn.relu), keras.layers.Dense(1, activation=tf.nn.sigmoid),])model.compile(optimizer=$0027adam$0027, loss=$0027mse$0027, metrics=[$0027accuracy$0027])history = model.fit(X_train, y_train, epochs=34, batch_size=1, validation_data=(X_val, y_val))
pitón
El siguiente fragmento muestra el gráfico de la pérdida de entrenamiento contra la pérdida de validación en el número de épocas. Esto ayudará al desarrollador del modelo a tomar decisiones informadas sobre las elecciones arquitectónicas que deben hacerse.
12345678910loss_train = history.history[$0027train_loss$0027]loss_val = history.history[$0027val_loss$0027]epochs =range(1,35)plt.plot(epochs, loss_train,$0027g$0027, label=$0027Training loss$0027)plt. plot(epochs, loss_val,$0027b$0027, label=$0027pérdida de validación$0027)plt.title($0027Pérdida de entrenamiento y validación$0027)plt.xlabel($0027Epochs$0027)plt.ylabel($0027Pérdida$0027)plt.legend()plt.show()
pitón
Salida
El siguiente fragmento muestra el gráfico de la precisión de la formación frente a la precisión de la validación en el número de épocas.
12345678910loss_train = history.history[$0027acc$0027]loss_val = history.history[$0027val_acc$0027]epochs =range(1,11)plt.plot(epochs, loss_train,$0027g$0027, label=$0027Training accuracy$0027)plt. plot(epochs, loss_val,$0027b$0027, label=$0027precision de validacion$0027)plt.title($0027Precisión de entrenamiento y validación$0027)plt.xlabel($0027Epochs$0027)plt.ylabel($0027Precisión$0027)plt.legend()plt.show()
pitón
Salida
1234567891011121314151617181920Epoch 1/10345/345 [==================================] - 1s 2ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 2/10345/345 [========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 3/10345/345 [==========================================] - 1s 2ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 4/10345/345 [========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 5/10345/345 [==========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 6/10345/345 [==========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 7/10345/345 [==========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 8/10345/345 [==========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 9/10345/345 [==========================================] - 0s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437Epoch 10/10345/345 [==========================================] - 1s 1ms/muestra - pérdida: 0.3043 - acc: 0.6957 - val_loss: 0.3563 - val_acc: 0.6437