import
			
			 
			CairoMakie
			

			
			using
			
			 

	
			FastAI

New visualization tools for FastAI.jl

  • based on blocks

  • support for different backends (currently text and Makie.jl)

  • high-level functions for use with learning tasks

Learning tasks


			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			imagenette2-320
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			Label
			)
			)
			

			
			task
			 
			=
			 
			

	
			ImageClassificationSingle
			(
			blocks
			)

			BlockTask(Image{2} -> Label{String})

showsample shows one sample from the data container:


			
			
			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			1
			)
			

			

	
			showsample
			(
			task
			,
			 
			sample
			)

			┌─────────────────────────────────────────────────────────┬───────────┐
│ Input                                                   │ Target    │
├─────────────────────────────────────────────────────────┼───────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ n01440764 │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │           │
└─────────────────────────────────────────────────────────┴───────────┘

showencodedsample shows a sample after encodings have been applied to it:


			
			
			
			
			x
			,
			 
			y
			 
			=
			 
			

	
			encodesample
			(
			task
			,
			 
			

	
			Validation
			(
			)
			,
			 
			sample
			)
			

			

	
			showencodedsample
			(
			task
			,
			 
			
			(
			x
			,
			 
			y
			)
			)

			┌───────────────────────────────────┬──────────────────────────────────────┐
│ x                                 │ y                                    │
├───────────────────────────────────┼──────────────────────────────────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
└───────────────────────────────────┴──────────────────────────────────────┘

Any encoded block that can't be visualized (here ImageTensor) is decoded until it can be using the task's encodings.


			
			
			
			
			using
			
			 
			Markdown
			;
			
			 
			
			

	
			FastAI
			.
			

	
			describeencodings
			(
			
			task
			.
			
			encodings
			,
			 
			
			task
			.
			
			blocks
			)
			 
			|>
			 
			
			Markdown
			.
			
			parse

It is also possible to show a complete (collated) batch using showbatch:


			
			
			
			
			xs
			,
			 
			ys
			 
			=
			 
			

	
			makebatch
			(
			task
			,
			 
			data
			,
			 
			
			1
			:
			3
			)
			

			

	
			showbatch
			(
			task
			,
			 
			
			(
			xs
			,
			 
			ys
			)
			)

			┌───────────────────────────────────┬──────────────────────────────────────┐
│ x                                 │ y                                    │
├───────────────────────────────────┼──────────────────────────────────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
├───────────────────────────────────┼──────────────────────────────────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
├───────────────────────────────────┼──────────────────────────────────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
└───────────────────────────────────┴──────────────────────────────────────┘

If you used a trained model to create outputs, you can compare these to the true data with showoutputbatch:


			
			
			
			outputs
			 
			=
			 
			
			reduce
			(
			hcat
			,
			 
			
			[
			
			
			rand
			(
			10
			)
			 
			for
			
			 
			_
			 
			in
			
			 
			1
			:
			3
			]
			)
			

			

	
			showoutputbatch
			(
			task
			,
			 
			
			(
			xs
			,
			 
			ys
			)
			,
			 
			outputs
			)

			┌──────────────────────────────────────────────────────────────────────────────┬──────────────────────────────────────┐
│ Encoded sample                                                               │ Output                               │
├──────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ ┌───────────────────────────────────┬──────────────────────────────────────┐ │              ┌                    ┐  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │ │    n01440764 ┤■■■■■■■■■■■■ 0.14      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │ │    n02102040 ┤■■■■■ 0.0645           │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │ │    n02979186 ┤■■■■■■ 0.0727          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │ │    n03000684 ┤■■■■■■ 0.0727          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │ │    n03028079 ┤■■■■■■■■■■■■■ 0.157    │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │ │    n03394916 ┤■■■■■■■■■■ 0.12        │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │ │    n03417042 ┤■■■■■■■■ 0.0978        │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │ │    n03425413 ┤■■■■■■■■■■■■ 0.141     │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │ │    n03445777 ┤■■■■■ 0.063            │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │ │    n03888257 ┤■■■■■■ 0.0705          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │ │              └                    ┘  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ └───────────────────────────────────┴──────────────────────────────────────┘ │                                      │
│                                                                              │                                      │
├──────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ ┌───────────────────────────────────┬──────────────────────────────────────┐ │              ┌                    ┐  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │ │    n01440764 ┤■■■■■ 0.0617           │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │ │    n02102040 ┤■■■■■■■ 0.082          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │ │    n02979186 ┤■■■■■■■■■■■ 0.133      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │ │    n03000684 ┤■■■■■■ 0.0761          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │ │    n03028079 ┤■■■■■■■■■■■■■ 0.156    │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │ │    n03394916 ┤■■■■■■■■■■■■ 0.14      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │ │    n03417042 ┤■■■■■■■■■■■ 0.133      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │ │    n03425413 ┤■■■■■ 0.0642           │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │ │    n03445777 ┤■■■■■ 0.0582           │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │ │    n03888257 ┤■■■■■■■■ 0.0963        │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │ │              └                    ┘  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ └───────────────────────────────────┴──────────────────────────────────────┘ │                                      │
│                                                                              │                                      │
├──────────────────────────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ ┌───────────────────────────────────┬──────────────────────────────────────┐ │              ┌                    ┐  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              ┌                    ┐  │ │    n01440764 ┤■■■■■■■ 0.0815         │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n01440764 ┤■■■■■■■■■■■■■■■ 1.0    │ │    n02102040 ┤■■■■■■■ 0.0873         │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02102040 ┤ 0.0                   │ │    n02979186 ┤■■■■■■■ 0.0851         │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n02979186 ┤ 0.0                   │ │    n03000684 ┤■■■■■■■ 0.0826         │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03000684 ┤ 0.0                   │ │    n03028079 ┤■■■■■■■■■■■■■ 0.155    │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03028079 ┤ 0.0                   │ │    n03394916 ┤■■■■■ 0.0637           │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03394916 ┤ 0.0                   │ │    n03417042 ┤■■■■■■ 0.0729          │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03417042 ┤ 0.0                   │ │    n03425413 ┤■■■■■■■■■■■■ 0.141     │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03425413 ┤ 0.0                   │ │    n03445777 ┤■■■■■■■■■ 0.106        │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03445777 ┤ 0.0                   │ │    n03888257 ┤■■■■■■■■■■ 0.124       │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │    n03888257 ┤ 0.0                   │ │              └                    ┘  │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │              └                    ┘  │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │ │                                      │
│ └───────────────────────────────────┴──────────────────────────────────────┘ │                                      │
│                                                                              │                                      │
└──────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────┘

These works for any learning task that deal with blocks that have a visualization defined. The following definition is all that is needed to add support for the Image block type to the text backend:


			
			
			
			function
			 
			

	
			showblock!
			(
			io
			,
			 
			
			::

	
			ShowText
			,
			 
			
			block
			::
			

	
			Image
			{
			2
			}
			,
			 
			data
			)
			
			

			
    
			
			
			ImageInTerminal
			.
			
			imshow
			(
			io
			,
			 
			data
			)
			

			

			end

			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			camvid
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			Mask
			)
			)
			

			
			task
			 
			=
			 
			

	
			ImageSegmentation
			(
			blocks
			)

			BlockTask(Image{2} -> Mask{2, String})

			
			
			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			1
			)
			

			

	
			showsample
			(
			task
			,
			 
			sample
			)

			┌───────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────┐
│ Input                                                         │ Target                                                        │
├───────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │
└───────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────┘

showblock


			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			pascal_2007
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			LabelMulti
			)
			)
			

			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			6
			)
			

			

	
			showblock
			(
			blocks
			,
			 
			sample
			)

			┌───────────────────────────────────────────────────────────────┬──────────────────────────────────────┐
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │ SubString{String}["person", "horse"] │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
│ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ │                                      │
└───────────────────────────────────────────────────────────────┴──────────────────────────────────────┘

showblock and showblocks

Using showblock, arbitrary visualizations can be created:


			
			
			
			blocks
			 
			=
			 
			
			(
			
			
			"
			Image
			"
			 
			=>
			 
			
			

	
			Image
			{
			2
			}
			(
			)
			,
			 
			
			
			"
			Mask
			"
			 
			=>
			 
			
			

	
			Mask
			{
			2
			}
			(
			
			1
			:
			3
			)
			,
			 
			
			
			"
			Class label
			"
			 
			=>
			 
			

	
			Label
			(
			
			1
			:
			10
			)
			)
			

			
			obs
			 
			=
			 
			
			

	
			FastAI
			.
			

	
			mockblock
			(
			
			last
			.
			
			(
			blocks
			)
			)
			

			

	
			showblock
			(
			blocks
			,
			 
			obs
			)

			┌──────────────────────────────────┬──────────────────────────────────┬─────────────┐
│ Image                            │ Mask                             │ Class label │
├──────────────────────────────────┼──────────────────────────────────┼─────────────┤
│ ████████████████████████████████ │ ████████████████████████████████ │ 3           │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
└──────────────────────────────────┴──────────────────────────────────┴─────────────┘

showblocks visualizes multiple observations:


			
			
			

	
			showblocks
			(
			blocks
			,
			 
			
			[
			
			
			

	
			FastAI
			.
			

	
			mockblock
			(
			
			last
			.
			
			(
			blocks
			)
			)
			 
			for
			
			 
			_
			 
			in
			
			 
			1
			:
			2
			]
			)

			┌──────────────────────────────────┬──────────────────────────────────┬─────────────┐
│ Image                            │ Mask                             │ Class label │
├──────────────────────────────────┼──────────────────────────────────┼─────────────┤
│ ████████████████████████████████ │ ████████████████████████████████ │ 2           │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
├──────────────────────────────────┼──────────────────────────────────┼─────────────┤
│ ████████████████████████████████ │ ████████████████████████████████ │ 6           │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
│ ████████████████████████████████ │ ████████████████████████████████ │             │
└──────────────────────────────────┴──────────────────────────────────┴─────────────┘

Makie

Makie.jl is no longer a required dependency. Instead, Makie.jl visualizations are only loaded if you have it imported (using Requires.jl). This reduces the load time of FastAI.jl significantly.


			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			imagenette2-320
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			Label
			)
			)
			

			
			task
			 
			=
			 
			

	
			ImageClassificationSingle
			(
			blocks
			)

			BlockTask(Image{2} -> Label{String})

showsample shows one sample from the data container:


			
			
			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			1
			)
			

			

	
			showsample
			(
			task
			,
			 
			sample
			)

showencodedsample shows a sample after encodings have been applied to it:


			
			
			
			
			x
			,
			 
			y
			 
			=
			 
			

	
			encodesample
			(
			task
			,
			 
			

	
			Validation
			(
			)
			,
			 
			sample
			)
			

			

	
			showencodedsample
			(
			task
			,
			 
			
			(
			x
			,
			 
			y
			)
			)

Any encoded block that can't be visualized (here ImageTensor) is decoded until it can be using the task's encodings.


			
			
			
			task
			.
			
			encodings

			(ProjectiveTransforms{2}(
    sz = (128, 128), 
    buffered = true, 
    augmentations = DataAugmentation.Identity()
), ImagePreprocessing{FixedPointNumbers.N0f8, 3, ColorTypes.RGB, Float32}(
    buffered = true, 
    augmentations = DataAugmentation.Identity()
), OneHot{DataType}(Float32, 0.5f0))

It is also possible to show a complete (collated) batch using showbatch:


			
			
			
			
			xs
			,
			 
			ys
			 
			=
			 
			

	
			makebatch
			(
			task
			,
			 
			data
			,
			 
			
			1
			:
			3
			)
			

			

	
			showbatch
			(
			task
			,
			 
			
			(
			xs
			,
			 
			ys
			)
			)

If you used a trained model to create outputs, you can compare these to the true data with showoutputbatch:


			
			
			
			outputs
			 
			=
			 
			
			reduce
			(
			hcat
			,
			 
			
			[
			
			
			rand
			(
			10
			)
			 
			for
			
			 
			_
			 
			in
			
			 
			1
			:
			3
			]
			)
			

			

	
			showoutputbatch
			(
			task
			,
			 
			
			(
			xs
			,
			 
			ys
			)
			,
			 
			outputs
			)

These works for any learning task that deal with blocks that have a visualization defined. The following definition is all that is needed to add support for the Image block type to the text backend:


			
			
			
			function
			 
			

	
			showblock!
			(
			io
			,
			 
			
			::

	
			ShowText
			,
			 
			
			block
			::
			

	
			Image
			{
			2
			}
			,
			 
			data
			)
			
			

			
    
			
			
			ImageInTerminal
			.
			
			imshow
			(
			io
			,
			 
			data
			)
			

			

			end

			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			camvid
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			Mask
			)
			)
			

			
			task
			 
			=
			 
			

	
			ImageSegmentation
			(
			blocks
			)

			BlockTask(Image{2} -> Mask{2, String})

			
			
			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			1
			)
			

			

	
			showsample
			(
			task
			,
			 
			sample
			)

showblock


			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			imagenette2-320
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			Label
			)
			)
			

			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			1
			)
			

			

	
			showblock
			(
			blocks
			,
			 
			sample
			)

			
			
			
			
			data
			,
			 
			blocks
			 
			=
			 
			
			loaddataset
			(
			
			"
			pascal_2007
			"
			,
			 
			
			(

	
			Image
			,
			 

	
			LabelMulti
			)
			)
			

			
			sample
			 
			=
			 
			

	
			getobs
			(
			data
			,
			 
			6
			)
			

			

	
			showblock
			(
			blocks
			,
			 
			sample
			)

showblock and showblocks

Using showblock, arbitrary visualizations can be created:


			
			
			
			blocks
			 
			=
			 
			
			(
			
			
			"
			Image
			"
			 
			=>
			 
			
			

	
			Image
			{
			2
			}
			(
			)
			,
			 
			
			
			"
			Mask
			"
			 
			=>
			 
			
			

	
			Mask
			{
			2
			}
			(
			
			1
			:
			3
			)
			,
			 
			
			
			"
			Class label
			"
			 
			=>
			 
			

	
			Label
			(
			
			1
			:
			10
			)
			)
			

			
			obs
			 
			=
			 
			
			

	
			FastAI
			.
			

	
			mockblock
			(
			
			last
			.
			
			(
			blocks
			)
			)
			

			

	
			showblock
			(
			blocks
			,
			 
			obs
			)

showblocks visualizes multiple observations:


			
			
			

	
			showblocks
			(
			blocks
			,
			 
			
			[
			
			
			

	
			FastAI
			.
			

	
			mockblock
			(
			
			last
			.
			
			(
			blocks
			)
			)
			 
			for
			
			 
			_
			 
			in
			
			 
			1
			:
			2
			]
			)