evaluation added
This commit is contained in:
parent
27c3bbff96
commit
194b850413
@ -18,10 +18,12 @@ WORKDIR /app
|
|||||||
COPY ./requirements.txt ./
|
COPY ./requirements.txt ./
|
||||||
COPY ./avocado-preprocessing.py ./
|
COPY ./avocado-preprocessing.py ./
|
||||||
COPY ./avocado-training.py ./
|
COPY ./avocado-training.py ./
|
||||||
|
COPY ./avocado-evaluation.py ./
|
||||||
|
|
||||||
RUN chmod +x ./requirements.txt
|
RUN chmod +x ./requirements.txt
|
||||||
RUN chmod +x ./avocado-preprocessing.py
|
RUN chmod +x ./avocado-preprocessing.py
|
||||||
RUN chmod +x ./avocado-training.py
|
RUN chmod +x ./avocado-training.py
|
||||||
|
RUN chmod +x ./avocado-evaluation.py
|
||||||
|
|
||||||
RUN pip3 install -r ./requirements.txt
|
RUN pip3 install -r ./requirements.txt
|
||||||
# CMD python3 avocado-preprocessing.py
|
# CMD python3 avocado-preprocessing.py
|
||||||
|
56
Jenkinsfile-evaluation
Normal file
56
Jenkinsfile-evaluation
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
|
||||||
|
parameters {
|
||||||
|
buildSelector(
|
||||||
|
defaultSelector: lastSuccessful(),
|
||||||
|
description: 'Which build to use for copying artifacts',
|
||||||
|
name: 'BUILD_SELECTOR'
|
||||||
|
)
|
||||||
|
|
||||||
|
buildSelector(
|
||||||
|
defaultSelector: lastSuccessful(),
|
||||||
|
description: 'Which build to use for copying artifacts',
|
||||||
|
name: 'BUILD_SELECTOR_DATASET'
|
||||||
|
)
|
||||||
|
|
||||||
|
buildSelector(
|
||||||
|
defaultSelector: lastSuccessful(),
|
||||||
|
description: 'Which build to use for copying artifacts',
|
||||||
|
name: 'BUILD_SELECTOR_TRAINING'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
stage('copy artifacts')
|
||||||
|
{
|
||||||
|
steps
|
||||||
|
{
|
||||||
|
copyArtifacts(fingerprintArtifacts: true, projectName: 's434742-create-dataset', selector: buildParameter('WHICH_BUILD_DATASET'))
|
||||||
|
copyArtifacts(fingerprintArtifacts: true, projectName: 's434742-training', selector: buildParameter('WHICH_BUILD_TRAINING'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('docker-training') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
def img = docker.build('patlaz/ium:1.0')
|
||||||
|
img.inside {
|
||||||
|
sh 'chmod +x avocado-evaluation.py'
|
||||||
|
sh 'python3 avocado-evaluation.py'
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
stage('sendMail') {
|
||||||
|
steps{
|
||||||
|
emailext body: currentBuild.result ?: 'SUCCESS',
|
||||||
|
subject: 's434742 evaluation',
|
||||||
|
to: '26ab8f35.uam.onmicrosoft.com@emea.teams.ms'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -42,14 +42,14 @@ pipeline {
|
|||||||
|
|
||||||
stage('archiveArtifacts') {
|
stage('archiveArtifacts') {
|
||||||
steps{
|
steps{
|
||||||
archiveArtifacts 'avocado-model.h5'
|
archiveArtifacts 'avocado_model.h5'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('sendMail') {
|
stage('sendMail') {
|
||||||
steps{
|
steps{
|
||||||
emailext body: currentBuild.result ?: 'SUCCESS',
|
emailext body: currentBuild.result ?: 'SUCCESS',
|
||||||
subject: 's434742',
|
subject: 's434742 training',
|
||||||
to: '26ab8f35.uam.onmicrosoft.com@emea.teams.ms'
|
to: '26ab8f35.uam.onmicrosoft.com@emea.teams.ms'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
42
avocado-evaluation.py
Normal file
42
avocado-evaluation.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
from tensorflow import keras
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from keras import backend as K
|
||||||
|
|
||||||
|
def recall_m(y_true, y_pred):
|
||||||
|
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
|
||||||
|
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
|
||||||
|
recall = true_positives / (possible_positives + K.epsilon())
|
||||||
|
return recall
|
||||||
|
|
||||||
|
def precision_m(y_true, y_pred):
|
||||||
|
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
|
||||||
|
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
|
||||||
|
precision = true_positives / (predicted_positives + K.epsilon())
|
||||||
|
return precision
|
||||||
|
|
||||||
|
def f1_m(y_true, y_pred):
|
||||||
|
precision = precision_m(y_true, y_pred)
|
||||||
|
recall = recall_m(y_true, y_pred)
|
||||||
|
return 2*((precision*recall)/(precision+recall+K.epsilon()))
|
||||||
|
|
||||||
|
|
||||||
|
# zaladowanie modelu
|
||||||
|
avocado_model = 'avocado-model.h5'
|
||||||
|
model = keras.models.load_model(avocado_model)
|
||||||
|
|
||||||
|
# odczytanie danych z plikow
|
||||||
|
avocado_train = pd.read_csv('avocado_train.csv')
|
||||||
|
avocado_test = pd.read_csv('avocado_test.csv')
|
||||||
|
avocado_validate = pd.read_csv('avocado_validate.csv')
|
||||||
|
|
||||||
|
# podzial na X i y
|
||||||
|
X_train = avocado_train[['average_price', 'total_volume', '4046', '4225', '4770', 'total_bags', 'small_bags', 'large_bags', 'xlarge_bags']]
|
||||||
|
y_train = avocado_train[['type']]
|
||||||
|
X_test = avocado_test[['average_price', 'total_volume', '4046', '4225', '4770', 'total_bags', 'small_bags', 'large_bags', 'xlarge_bags']]
|
||||||
|
y_test = avocado_test[['type']]
|
||||||
|
|
||||||
|
# ewaluacja
|
||||||
|
loss, accuracy, f1_score, precision, recall = model.evaluate(X_test, y_test, verbose=0)
|
||||||
|
with open('')
|
@ -11,6 +11,7 @@ from tensorflow.keras.models import Model
|
|||||||
from tensorflow.keras.callbacks import EarlyStopping
|
from tensorflow.keras.callbacks import EarlyStopping
|
||||||
from keras.models import Sequential
|
from keras.models import Sequential
|
||||||
|
|
||||||
|
# odczytanie danych z plików
|
||||||
avocado_train = pd.read_csv('avocado_train.csv')
|
avocado_train = pd.read_csv('avocado_train.csv')
|
||||||
avocado_test = pd.read_csv('avocado_test.csv')
|
avocado_test = pd.read_csv('avocado_test.csv')
|
||||||
avocado_validate = pd.read_csv('avocado_validate.csv')
|
avocado_validate = pd.read_csv('avocado_validate.csv')
|
||||||
@ -37,8 +38,11 @@ model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']
|
|||||||
epochs = int(sys.argv[1])
|
epochs = int(sys.argv[1])
|
||||||
batch_size = int(sys.argv[2])
|
batch_size = int(sys.argv[2])
|
||||||
|
|
||||||
|
# trenowanie modelu
|
||||||
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test))
|
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test))
|
||||||
model.save('avocado-model.h5')
|
|
||||||
|
# zapisanie modelu
|
||||||
|
model.save('avocado_model.h5')
|
||||||
|
|
||||||
# predict
|
# predict
|
||||||
predictions = model.predict(X_test)
|
predictions = model.predict(X_test)
|
||||||
|
Can't render this file because it is too large.
|
Can't render this file because it is too large.
|
BIN
data/avocado_model.h5
Normal file
BIN
data/avocado_model.h5
Normal file
Binary file not shown.
2001
data/avocado_test.csv
Normal file
2001
data/avocado_test.csv
Normal file
File diff suppressed because it is too large
Load Diff
6001
data/avocado_train.csv
Normal file
6001
data/avocado_train.csv
Normal file
File diff suppressed because it is too large
Load Diff
2001
data/avocado_validate.csv
Normal file
2001
data/avocado_validate.csv
Normal file
File diff suppressed because it is too large
Load Diff
Can't render this file because it is too large.
|
Can't render this file because it is too large.
|
Can't render this file because it is too large.
|
Loading…
Reference in New Issue
Block a user