curva de pérdida

Antes de dibujar curvas usando un script, la necesidad de secuencia de comandos para utilizar un extract_log.py, formato de registro, herramientas de visualización para la elaboración de un nuevo archivo de registro se genera, la extract_log.py registro con formato siguiente secuencia de comandos (y el archivo de registro generado en el mismo directorio)

codificación = utf-8

El archivo de registro se utiliza para extraer la formación, después de retirar el registro para que el registro no se puede analizar el formato de archivo, genera un nuevo archivo de registro para las herramientas de visualización de dibujo

importación inspeccionar
os importación
importan al azar
importación sys
def extract_log (archivo_registro, new_log_file, key_word):
con (archivo_registro, 'r') abierto como f:
con abierto (new_log_file, 'w') como train_log:
#f = abierto (archivo_registro)
# train_log = abierto (new_log_file, 'w')
para la línea en f:
#去除多GPU的同步log
si 'Syncing' en línea:
continuar
#去除除零错误的log
si 'nan' en línea:
continuar
si key_word en línea:
train_log.write (línea)
f.close ()
train_log.close ()

extract_log ( 'train_yolov3.log', 'train_log_loss.txt', 'Imágenes')
extract_log ( 'train_yolov3.log', 'train_log_iou.txt',
'la IOU') -------------- -
después de correr, analiza las filas y filas de pérdida de archivos de registro y llévese dos IOU archivo txt

Utilice train_loss_visualization.py script puede trazar la curva de pérdida de
secuencia de comandos train_loss_visualization.py de la siguiente manera (también el mismo directorio que el archivo Nueva py):

pandas de importación como pd
numpy importación como np
matplotlib.pyplot importación como PLT
#% matplotlib en línea

líneas = 5124 #改为自己生成的train_log_loss.txt中的行数
resultar pd.read_csv = ( 'train_log_loss.txt', skiprows = [x para x en el rango (líneas) si ((x% 10 = 9)! | (x <1.000))], error_bad_lines = nombres = [ 'pérdida' False, 'avg', 'tasa', 'segundo', 'imágenes'])
result.head ()

resultar [ 'pérdida'] = resultado [ 'pérdida']. str.split ( ' ') .str.get (1)
resultado [' avg '] = resultado [' avg ']. str.split (''). str.get (1)
resultado [ 'tasa'] = resultado [ 'tasa']. str.split (' ') .str.get (1)
resultado [' segundos '] = resultado de [' segundo]. str. split ( ' ') .str.get (1)
resultado [' imágenes '] = resultado de [' '] imágenes. str.split ('') .str.get (1)
result.head ()
result.tail ()

impresión (result.head ())

impresión (result.tail ())

impresión (result.dtypes)

imprimir (resultado [ 'pérdida'])
de impresión (resultado [ 'promedio'])
de impresión (resultado [ 'tasa'])
de impresión (resultado [ '']) segundos
de impresión (resultado imágenes [ ''])

resultar [ 'pérdida'] = pd.to_numeric (resultado [ 'pérdida'])
resultado [ 'avg'] = pd.to_numeric (resultado [ 'avg'])
resultado [ 'tasa'] = pd.to_numeric (resultado [' tasa '])
resultado [' segundo '] = pd.to_numeric (resultado [' segundo '])
resultado [' imágenes '] = pd.to_numeric de resultados [(' imágenes])
result.dtypes

fig = plt.figure ()
ax = fig.add_subplot (1, 1, 1)
ax.plot (resultado [ 'avg']. valores, label = 'avg_loss')

ax.plot (resultado [ 'pérdida']. valores, label = 'pérdida')

ax.legend (loc = 'mejor') # columna de la figura posición adaptativo
ax.set_title ( 'Pérdida de las curvas')
ax.set_xlabel ( 'lotes')
fig.savefig ( 'avg_loss')

Modificar el número train_log_loss.txt líneas train_loss_visualization.py en las filas, y cambiar el número de líneas a ser omitidos según sea necesario:

skiprows = [x para x en el rango de (líneas) if ((x% 10 = 9) |! (x <1.000))]

train_loss_visualization.py ejecutar generará avg_loss.png en el camino de las mentiras de script.
----------------
mediante el análisis de curvas de pérdida, el aprendizaje de las variaciones del tipo modifican estrategia cfg.

Además de la pérdida visual, también se puede visualizar Promedio IOU, parámetros Promedio Recall
visualizaron 'Región Promedio IOU', 'Clase ', 'obj', 'No obj', 'Promedio Recall', 'count' parámetros pueden train_iou_visualization.py guión , y utilizar el mismo train_loss_visualization.py, escritura train_iou_visualization.py es la siguiente (#lines el número de filas de modificado
train_log_iou.txt): ----------------

pandas de importación como pd
numpy importación como np
matplotlib.pyplot importación como PLT
#% matplotlib en línea

líneas = 122956 #根据train_log_iou.txt的行数修改
resultar = pd.read_csv ( 'train_log_iou.txt', skiprows = [x para x en el rango de (líneas) si (x% 100 o x% 109)], error_bad_lines = False, nombres = [ 'Región Promedio IOU', 'Clase', 'obj', 'No obj', 'Promedio Recall', 'count'])
result.head ()

resultar [ 'Región Promedio IOU'] = resultado [ 'Región Promedio IOU'] str.split ( ': '). .str.get (1)
resultado [' Clase'] = resultado [ 'Clase'] str.split. ( ': ') .str.get (1)
resultado [' Obj'] = resultado [ 'Obj'] str.split. ( ': ') .str.get (1)
resultado [' No Obj'] = resultado [ 'No Obj'] str.split ( ': '). .str.get (1)
resultado [' Promedio Recall'] = resultado [ 'Promedio Recall'] str.split. ( ':') .str.get (1)
resultado [ 'count'] = resultado [ 'count'] str.split. ( ':') .str.get (1)
result.head ()
result.tail ()

impresión (result.head ())

impresión (result.tail ())

impresión (result.dtypes)

imprimir (resultado [ 'Región Promedio IOU'])

resultar [ 'Región Promedio IOU'] = pd.to_numeric (resultado [ 'Región Promedio IOU'])
resultado [ 'Clase'] = pd.to_numeric (resultado [ 'Clase'])
resultado [ 'Obj'] = pd.to_numeric (resultado de [ 'Obj'])
resultado [ 'No Obj'] = pd.to_numeric (resultado [ 'No Obj'])
resultado [ 'Promedio Recall'] = pd.to_numeric (resultado [ 'Promedio Recall'])
resultado [ 'recuento'] = pd.to_numeric (resultado [] 'count')
result.dtypes

fig = plt.figure ()
ax = fig.add_subplot (1, 1, 1)
ax.plot (resultado [ 'Región Promedio IOU']. valores, label = 'Región Promedio IOU')

ax.plot (resultado [ 'Clase']. valores, label = 'clase')

ax.plot (resultado [ 'Obj']. valores, label = 'Obj')

ax.plot (resultado [ 'No Obj']. valores, label = 'No Obj')

ax.plot (resultado [ 'Promedio Recall']. valores, label = 'Promedio Recall')

ax.plot (resultado [ 'contar']. valores, label = 'count')

ax.legend (loc = 'mejor')

ax.set_title ( 'Las curvas Región Promedio IOU')

ax.set_title ( 'Las curvas Región Promedio IOU')
ax.set_xlabel ( 'lotes')

fig.savefig ( 'Promedio IOU')

fig.savefig ( 'Región Promedio
IOU') ----------------
#! / usr / bin / python
# = codificación UTF-8

pandas de importación como pd
numpy importación como np
matplotlib.pyplot importación como PLT

# Modificar las líneas de acuerdo con el número de filas propia log_loss.txt, modificar el número inicial de iteraciones (start_ite) al final de la formación y el número de veces (end_ite).
4500 = líneas
start_ite = número mínimo de iteraciones 6000 # log_loss.txt dentro
end_ite = número máximo de iteraciones 15000 # log_loss.txt dentro
paso = 10 # Número de saltos, determinar el grado de denso dibujo
igore = 0 # pérdida cuando se inicia una mayor cuando se necesita hacer caso omiso de las primeras iteraciones igore, nota que este es el número de iteraciones

y_ticks = [0,4, 0,5, 0,6 , 0,7, 0,8, 0,9, 1,0, 1,1, 1,2, 1,3, 1,4] # valor de la ordenada o puede establecer su propio.
Path data_path = '2048 / log_loss2.txt' #log_loss de.
result_path = #'./2048/avg_loss guardar el resultado.

----------------- #### sólo se necesita cambiar lo anterior, el siguiente no puede cambiar
los nombres = [ 'pérdida', ' promedio', 'tasa', 'segundo' , 'Imágenes']
Resultado = pd.read_csv (Data_Path, SkipRows = [X para X en Rango (líneas) IF (x <Líneas * 1,0 / ((end_ite -. start_ite) * 1,0) * igore 9 o X =% PASO )], error_bad_lines =
Falso, nombres = nombres)
result.head ()
para los nombres de nombre:
Resultado [nombre] = Resultado [nombre] .str.split ( '') .str.get (1).

result.head ()
result.tail ()

para el nombre en los nombres de:
resultado [nombre] = pd.to_numeric (resultado de [nombre])
result.dtypes
de impresión (resultado [ 'avg'] valores).

fig = plt.figure ()
ax = fig.add_subplot (1, 1, 1)

### ----------- valor de ajuste de la abscisa.
len = coord_x (Resultado [ 'AVG'] valores.)
tmp = (end_ite-start_ite - igore) / (coord_x 1,0)
X = []
para I en Rango (coord_x):
x.append (I
tmp + + start_ite igore)
#Print (X)
de impresión ( 'D total =% \ n-' coord_x%)
de impresión ( '% D = inicio, final D =% \ n -' % (X [0], X [-1]))
### ----------

ax.plot (X, Resultado [ 'AVG']. Los valores, label = 'avg_loss')
# ax.plot (Resultado [ 'pérdida']. Los valores, label = 'pérdida')
# no plt.yticks (y_ticks) si lo hace establecer su propio eje vertical, se puede comentar.
plt.grid ()
ax.legend (LOC = 'Mejor')
ax.set_title ( 'Pérdida de las curvas')
ax.set_xlabel ( 'lotes')
fig.savefig (result_path)

OI ---------------
Imprt aplotlib.pyplot AS PLT
# La LO
igore = 10
Data_Path =' ./

Publicado 41 artículos originales · ganado elogios 7 · vistas 3699

Supongo que te gusta

Origin blog.csdn.net/weixin_43091087/article/details/102738776
Recomendado
Clasificación