logger.jl

YVIq2/src/callbacks/logging/ is a source file in module YVIq2

			
			
			
			import
			
			
			 
			
			.
			
	
		
			Loggables
			
			

			
			

			
			

			
			
			abstract
			
			 
			
			type
			
			 
			
	
		
			LoggerBackend
			
			 
			
			end
			
			

			
			

			
			

			
			
			function
			
			 
			
			
	
		
			log_to
			
			(
			
			
			backends
			
			::
			
			Tuple
			
			,
			
			 
			
			loggable
			
			,
			
			 
			
			name
			
			,
			
			 
			
			i
			
			
			;
			
			 
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			)
			
			)
			
			
			
    
			
			
			for
			
			
			 
			
			backend
			
			 
			
			in
			
			 
			
			backends
			
			
			
        
			
			
	
		
			log_to
			
			(
			
			backend
			
			,
			
			 
			
			loggable
			
			,
			
			 
			
			name
			
			,
			
			 
			
			i
			
			,
			
			 
			
			
			group
			
			 
			
			=
			
			 
			
			group
			
			)
			
			
    
			
			end
			
			

			
			end
			
			

			
			

			
			

			
			
			
			
			struct
			
			
			 
			
	
		
			LogMetrics
			
			 
			
			<:
			
			 
			
	
		
			Callback
			
			
			
    
			
			
			backends
			
			::
			
			Tuple
			
			
    
			
			
			
	
		
			LogMetrics
			
			(
			
			
			backends
			
			...
			
			)
			
			 
			
			=
			
			 
			
			
			new
			
			(
			
			backends
			
			)
			
			

			
			end
			
			

			
			

			
			
			
	
		
			stateaccess
			
			(
			
			
			::
			
	
		
			LogMetrics
			
			)
			
			 
			
			=
			
			 
			
			
			(
			
			
    
			
			
			cbstate
			
			 
			
			=
			
			 
			
			
			(
			
			
			history
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			 
			
			
			metricsstep
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			 
			
			
			metricsepoch
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			)
			
			,
			
			)
			
			

			
			

			
			

			
			
			function
			
			 
			
			
	
		
			on
			
			(
			
			
			::
			
	
		
			StepEnd
			
			,
			
			 
			
			phase
			
			,
			
			 
			
			
			logger
			
			::
			
	
		
			LogMetrics
			
			,
			
			 
			
			learner
			
			)
			
			
			
    
			
			
			history
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			history
			
			[
			
			phase
			
			]
			
			
    
			
			
			metricsstep
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			metricsstep
			
			[
			
			phase
			
			]
			
			
    
			
			
			for
			
			
			 
			
			metric
			
			 
			
			in
			
			 
			
			
			keys
			
			(
			
			metricsstep
			
			)
			
			
			
        
			
			
			val
			
			 
			
			=
			
			 
			
			
			last
			
			(
			
			
			last
			
			(
			
			metricsstep
			
			,
			
			 
			
			metric
			
			)
			
			)
			
			
        
			
			
	
		
			log_to
			
			(
			
			
            
			
			
			logger
			
			.
			
			
			backends
			
			,
			
			
            
			
			
			
	
		
			Loggables
			
			.
			
			
	
		
			Value
			
			(
			
			val
			
			)
			
			,
			
			
            
			
			
			string
			
			(
			
			metric
			
			)
			
			,
			
			
            
			
			
			history
			
			.
			
			
			steps
			
			,
			
			
            
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			"
			
			Step
			
			"
			
			,
			
			 
			
			
			string
			
			(
			
			
			typeof
			
			(
			
			phase
			
			)
			
			)
			
			,
			
			 
			
			"
			
			Metrics
			
			"
			
			)
			
			)
			
			
    
			
			end
			
			

			
			end
			
			

			
			

			
			

			
			
			function
			
			 
			
			
	
		
			on
			
			(
			
			
			::
			
	
		
			EpochEnd
			
			,
			
			 
			
			phase
			
			,
			
			 
			
			
			logger
			
			::
			
	
		
			LogMetrics
			
			,
			
			 
			
			learner
			
			)
			
			
			
    
			
			
			history
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			history
			
			[
			
			phase
			
			]
			
			
    
			
			
			metricsepoch
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			metricsepoch
			
			[
			
			phase
			
			]
			
			
    
			
			
			for
			
			
			 
			
			metric
			
			 
			
			in
			
			 
			
			
			keys
			
			(
			
			metricsepoch
			
			)
			
			
			
        
			
			
			
			_
			
			,
			
			 
			
			val
			
			 
			
			=
			
			 
			
			
			last
			
			(
			
			metricsepoch
			
			,
			
			 
			
			metric
			
			)
			
			
        
			
			
	
		
			log_to
			
			(
			
			
            
			
			
			logger
			
			.
			
			
			backends
			
			,
			
			
            
			
			
			
	
		
			Loggables
			
			.
			
			
	
		
			Value
			
			(
			
			val
			
			)
			
			,
			
			
            
			
			
			string
			
			(
			
			metric
			
			)
			
			,
			
			
            
			
			
			history
			
			.
			
			
			epochs
			
			,
			
			
            
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			"
			
			Epoch
			
			"
			
			,
			
			 
			
			
			string
			
			(
			
			
			typeof
			
			(
			
			phase
			
			)
			
			)
			
			,
			
			 
			
			"
			
			Metrics
			
			"
			
			)
			
			)
			
			
    
			
			end
			
			

			
			end
			
			

			
			

			
			

			
			

			
			
			
			
			struct
			
			
			 
			
	
		
			LogHyperParams
			
			 
			
			<:
			
			 
			
	
		
			Callback
			
			
			
    
			
			
			backends
			
			::
			
			Tuple
			
			
    
			
			
			
	
		
			LogHyperParams
			
			(
			
			
			backends
			
			...
			
			)
			
			 
			
			=
			
			 
			
			
			new
			
			(
			
			backends
			
			)
			
			

			
			end
			
			

			
			

			
			
			
	
		
			stateaccess
			
			(
			
			
			::
			
	
		
			LogHyperParams
			
			)
			
			 
			
			=
			
			 
			
			
			(
			
			
    
			
			
			cbstate
			
			 
			
			=
			
			 
			
			
			(
			
			
			history
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			 
			
			
			hyperparams
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			)
			
			,
			
			)
			
			

			
			

			
			
			function
			
			 
			
			
	
		
			on
			
			(
			
			
			::
			
	
		
			StepEnd
			
			,
			
			 
			
			phase
			
			,
			
			 
			
			
			logger
			
			::
			
	
		
			LogHyperParams
			
			,
			
			 
			
			learner
			
			)
			
			
			
    
			
			
			history
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			history
			
			[
			
			phase
			
			]
			
			
    
			
			
			hyperparams
			
			 
			
			=
			
			 
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			hyperparams
			
			
    
			
			
			for
			
			
			 
			
			hparam
			
			 
			
			in
			
			 
			
			
			keys
			
			(
			
			hyperparams
			
			)
			
			
			
        
			
			
			val
			
			 
			
			=
			
			 
			
			
			last
			
			(
			
			
			last
			
			(
			
			hyperparams
			
			,
			
			 
			
			hparam
			
			)
			
			)
			
			
        
			
			
	
		
			log_to
			
			(
			
			
            
			
			
			logger
			
			.
			
			
			backends
			
			,
			
			
            
			
			
			
	
		
			Loggables
			
			.
			
			
	
		
			Value
			
			(
			
			val
			
			)
			
			,
			
			
            
			
			
			string
			
			(
			
			hparam
			
			)
			
			,
			
			
            
			
			
			history
			
			.
			
			
			steps
			
			,
			
			
            
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			"
			
			Step
			
			"
			
			,
			
			 
			
			"
			
			HParams
			
			"
			
			)
			
			)
			
			
    
			
			end
			
			

			
			end

TODO: add support for logging histograms of layer activations and gradients


			
			
			
			
			
			struct
			
			
			 
			
	
		
			LogHistograms
			
			 
			
			<:
			
			 
			
	
		
			Callback
			
			
			
    
			
			
			backends
			
			::
			
			Tuple
			
			
    
			
			
			function
			
			 
			
			
	
		
			LogHistograms
			
			(
			
			
			backends
			
			...
			
			
			;
			
			 
			
			
			freq
			
			 
			
			=
			
			 
			
			100
			
			)
			
			
			
        
			
			
			if
			
			 
			
			
			isnothing
			
			(
			
			freq
			
			)
			
			
			
            
			
			
			return
			
			 
			
			
			new
			
			(
			
			backends
			
			)
			
			
        
			
			else
			
			
			
            
			
			
			return
			
			 
			
			
	
		
			throttle
			
			(
			
			
			new
			
			(
			
			backends
			
			)
			
			,
			
			 
			
	
		
			StepEnd
			
			,
			
			 
			
			
			freq
			
			 
			
			=
			
			 
			
			freq
			
			)
			
			
        
			
			end
			
			
    
			
			end
			
			

			
			end
			
			

			
			

			
			

			
			
			
	
		
			stateaccess
			
			(
			
			
			::
			
	
		
			LogHistograms
			
			)
			
			 
			
			=
			
			 
			
			
			(
			
			
			model
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			 
			
			
			cbstate
			
			 
			
			=
			
			 
			
			
			(
			
			
			history
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			)
			
			)
			
			

			
			

			
			

			
			
			function
			
			 
			
			
	
		
			on
			
			(
			
			
			::
			
	
		
			StepEnd
			
			,
			
			 
			
			
			phase
			
			::
			
	
		
			AbstractTrainingPhase
			
			,
			
			 
			
			
			logger
			
			::
			
	
		
			LogHistograms
			
			,
			
			 
			
			learner
			
			)
			
			
			
    
			
			
			history
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			history
			
			[
			
			phase
			
			]
			
			
    
			
			
	
		
			log_parameters
			
			(
			
			
        
			
			
			logger
			
			.
			
			
			backends
			
			,
			
			
        
			
			
			learner
			
			.
			
			
			model
			
			,
			
			
        
			
			"
			
			Model
			
			"
			
			,
			
			
        
			
			
			history
			
			.
			
			
			steps
			
			,
			
			
        
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			"
			
			Step
			
			"
			
			,
			
			 
			
			"
			
			Histograms
			
			"
			
			,
			
			 
			
			"
			
			Weights
			
			"
			
			)
			
			)
			
			

			
			end
			
			

			
			

			
			

			
			
			function
			
			 
			
			
	
		
			log_parameters
			
			(
			
			backends
			
			,
			
			 
			
			x
			
			,
			
			 
			
			name
			
			,
			
			 
			
			epochs
			
			
			;
			
			 
			
			group
			
			)
			
			
			
    
			
			
			params
			
			 
			
			=
			
			 
			
			
			
			Flux
			
			.
			
			
			trainable
			
			(
			
			x
			
			)
			
			
    
			
			
			if
			
			
			 
			
			
			isempty
			
			(
			
			params
			
			)
			
			 
			
			&&
			
			
			 
			
			x
			
			 
			
			isa
			
			 
			
			AbstractArray
			
			
			
       
			
			
	
		
			log_to
			
			(
			
			
            
			
			backends
			
			,
			
			
            
			
			
			
	
		
			Loggables
			
			.
			
			
	
		
			Histogram
			
			(
			
			
			vec
			
			(
			
			x
			
			)
			
			)
			
			,
			
			
            
			
			name
			
			,
			
			
            
			
			epochs
			
			,
			
			
            
			
			
			group
			
			 
			
			=
			
			 
			
			group
			
			)
			
			
    
			
			else
			
			
			
        
			
			
			for
			
			
			 
			
			
			(
			
			pname
			
			,
			
			 
			
			pval
			
			)
			
			 
			
			in
			
			 
			
			
			pairs
			
			(
			
			params
			
			)
			
			
			
            
			
			
	
		
			log_parameters
			
			(
			
			
                
			
			backends
			
			,
			
			
                
			
			pval
			
			,
			
			
                
			
			
			"
			
			$
			
			name
			
			.
			
			$
			
			pname
			
			"
			
			,
			
			
                
			
			epochs
			
			,
			
			
                
			
			
			group
			
			 
			
			=
			
			 
			
			group
			
			)
			
			
        
			
			end
			
			
    
			
			end
			
			

			
			end
			
			

			
			

			
			

			
			
			
			
			struct
			
			
			 
			
	
		
			LogVisualization
			
			 
			
			<:
			
			 
			
	
		
			Callback
			
			
			
    
			
			visfn
			
			
    
			
			
			backends
			
			::
			
			Tuple
			
			
    
			
			
			function
			
			 
			
			
	
		
			LogVisualization
			
			(
			
			visfn
			
			,
			
			 
			
			
			backends
			
			...
			
			
			;
			
			 
			
			
			freq
			
			 
			
			=
			
			 
			
			100
			
			)
			
			
			
        
			
			
			cb
			
			 
			
			=
			
			 
			
			
			new
			
			(
			
			visfn
			
			,
			
			 
			
			backends
			
			)
			
			
        
			
			
			if
			
			 
			
			
			isnothing
			
			(
			
			freq
			
			)
			
			
			
            
			
			
			return
			
			 
			
			cb
			
			
        
			
			else
			
			
			
            
			
			
			return
			
			 
			
			
	
		
			throttle
			
			(
			
			cb
			
			,
			
			 
			
	
		
			StepEnd
			
			,
			
			 
			
			
			freq
			
			 
			
			=
			
			 
			
			freq
			
			)
			
			
        
			
			end
			
			
    
			
			end
			
			

			
			

			
			end
			
			

			
			

			
			

			
			
			
	
		
			stateaccess
			
			(
			
			
			::
			
	
		
			LogVisualization
			
			)
			
			 
			
			=
			
			 
			
			
			(
			
			
			step
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			 
			
			
			cbstate
			
			 
			
			=
			
			 
			
			
			(
			
			
			history
			
			 
			
			=
			
			 
			
			
	
		
			Read
			
			(
			
			)
			
			,
			
			)
			
			)
			
			

			
			

			
			
			function
			
			 
			
			
	
		
			on
			
			(
			
			
			::
			
	
		
			StepEnd
			
			,
			
			 
			
			
			phase
			
			::
			
	
		
			AbstractTrainingPhase
			
			,
			
			 
			
			
			logger
			
			::
			
	
		
			LogVisualization
			
			,
			
			 
			
			learner
			
			)
			
			
			
    
			
			
			history
			
			 
			
			=
			
			 
			
			
			
			
			learner
			
			.
			
			
			cbstate
			
			.
			
			
			history
			
			[
			
			phase
			
			]
			
			
    
			
			
			image
			
			 
			
			=
			
			 
			
			
			
			logger
			
			.
			
			
			visfn
			
			(
			
			
			learner
			
			.
			
			
			step
			
			)
			
			

			
			
    
			
			
	
		
			log_to
			
			(
			
			
        
			
			
			logger
			
			.
			
			
			backends
			
			,
			
			
        
			
			
			
	
		
			Loggables
			
			.
			
			
	
		
			Image
			
			(
			
			image
			
			)
			
			,
			
			
        
			
			"
			
			Visualization
			
			"
			
			,
			
			
        
			
			
			history
			
			.
			
			
			steps
			
			,
			
			
        
			
			
			group
			
			 
			
			=
			
			 
			
			
			(
			
			"
			
			Step
			
			"
			
			,
			
			)
			
			)
			
			

			
			end