Scientific ML Studio
Learn/ Studio Tour/ 5.3
5.3 · Put it together

When the Graph check complains

Every note the Graph check can show, in the words the Lab uses, with what it means and what to do. Notes are advice, not errors: the Lab still builds a script.

The strip under the canvas lists a note for each thing it finds. Notes appear in the order a person tends to meet them: the whole graph first, then the domain, the physics, the conditions, the network, and finally the assembly. Words in italics below are the Lab's own, with the changing parts (a number, a block name) shown in braces.

Two things to keep in mind. A note never stops Generate code or Download .py; only an invalid loss-weight list does (see Balance the loss). And when a note says a default will be used, that is exactly what the script will do, so you can decide whether the default is acceptable.

Your screenshot · the strip under the canvas showing two or three notes, for example after you unwire the Network block's Coords.

The whole graph

Note What to do
The canvas is empty. Drag a Domain block in to begin. Place a Domain block.
There is no Train block. Nothing can be generated until one sink exists for the graph to be assembled into. Place a Train block and wire the Loss and Optimiser into it. The script you would get is only a stub.
There are {n} Train blocks. Only the first is used. Delete the extra Train block.
Not wired into the Train block, so ignored: {names}. Wire those blocks in, or leave them parked on the side on purpose.

The domain

Note What to do
No Domain block is wired in. The generated script falls back to the unit interval. Place a Domain block and wire its outputs.
There are {n} Domain blocks wired in. Only the first is used. Remove the extra one.
Domain: x_min must be smaller than x_max (currently {a} and {b}). Swap or correct the two numbers. The same applies to y.
Domain: the circle radius must be greater than zero. Enter a positive radius.
Domain: t initial must be smaller than t final. Correct the times.

The equation

Note What to do
No PDE block is wired in. There is no interior residual to minimise. Place a PDE block and wire in both its inputs.
PDE: '{equation}' is a {actual} equation but the block is set to {declared}. The {actual} rules will be applied. The Equation type and Equation menus disagree. The equation wins. Set the type to match, to silence the note.
PDE: an elliptic equation is steady, but the Domain has its time dimension switched on. Switch time off on the Domain, or choose a time-dependent equation.
PDE: a {class} equation evolves in time, but the Domain has no time dimension, so its time derivative is dropped and the steady-state form is solved. Tick the time box on the Domain block for the time-dependent problem. Tick Time dimension on the Domain.
PDE: Burgers is written here for one spatial dimension. On a 2-D domain the convective term becomes u(u_x + u_y). Use Burgers on a line, or be sure that the 2-D form is what you want.
Source term: unknown symbol 'z' (available here: e, pi, x) and similar A formula the Lab could not read. Fix the formula (see formula rules). The Lab used a constant in its place.
PDE: cf_e must be a finite number. (or cf_d) In the general coefficient form, the two time-derivative coefficients must be plain numbers.

Conditions

Note What to do
No boundary conditions are wired in. The problem is under-determined. Add BC blocks and wire the Domain's boundaries into them.
No condition on {BC names}. Those boundaries are left free. Add a BC block for each listed boundary, or leave it free on purpose.
A Boundary condition block is not wired to any boundary port on the Domain. It is ignored. Wire a Domain boundary port into the block's Boundary input.
A periodic condition on {BC} has no opposite edge on this geometry. A circle has no opposite edge. Use another condition type.
A time-evolving equation is an initial-value problem, but no Initial condition block is wired in. Add an IC block.
An Initial condition is wired in but the Domain has no time dimension, so there is no initial surface to apply it on. Tick Time dimension, or remove the IC.
An elliptic equation is steady: an initial condition does not apply to it. Remove the IC.
A second-order time equation needs an initial velocity as well as an initial value. Tick 'Initial velocity' on the IC block. Tick Initial velocity on the IC and give a value.
Boundary value: …, Boundary flux: …, Initial value: … A formula problem, as above.

The network

Note What to do
No Network block is wired in. A four-layer default is used. Place a Network block and connect it, or accept the default.
The Network block has no Coords wire from the Domain, so its input width is assumed to be {n}. Wire Domain 'Coords' to Network 'Coords' to make it follow the geometry. Wire Domain Coords to Network Coords.
A block refers to network output {k}, but the Network block is set to {m} output(s). Raise Network outputs, or lower the Applies to network output number on the block that asked for output {k}.
The Network block's hidden layer list could not be read. Four layers of 40 are used. Rewrite the list as numbers separated by commas.
There are {n} Encoding blocks reachable. Only one feeding a Network block's Coords port is used. Remove the extra Encoding block.
An Encoding block is on the canvas but nothing wires its Encoded output into a Network block's Coords port, so it has no effect. Wire Encoding Encoded to Network Coords, or delete the block.
An Encoding block has no Coords wire in from the Domain (or another Encoding block). Wire the Domain's Coords into it.
An Encoding block is set to a mapping that isn't available yet… Set the Mapping to Fourier features.

The assembly

Note What to do
No Loss block is wired in. Terms are combined with equal weights. Place a Loss block if you want to set weights.
The Loss block has no PDE residual wired into it. Wire PDE PDE residual into the Loss.
The Loss block has no conditions wired into it. Wire every BC and IC into the Loss's BC / IC input.
The Loss block has no Network wired into it. Wire Network Network into the Loss.
No Optimisation block is wired in. Adam at 1e-3 is used. Place an Optimiser block and wire it into Train, or accept the default. (The note says "Optimisation"; the block is called Optimiser.)
The Train block has no Loss wired into it. Wire Loss Loss into Train.
The Train block has no Optimisation wired into it. Wire Optimiser Optimiser into Train.

The plots

Note What to do
Visualisation: the 'line' field plot needs a 1-D domain; this one has {n} spatial coordinates, so a contour plot is drawn instead. Choose a field style that fits, or leave it on Auto.
Visualisation: the '{contour or surface}' field plot needs a 2-D domain; this one is 1-D, so a line plot is drawn instead. The same.

What the Graph check does not catch

  • An IC block that is not wired to the Domain's Initial output. The check says nothing about it. Wire it, as in the starters.
  • A wrong physical value. The check cannot tell that a boundary should be 1 and you typed 10.
  • A wrong sign. The most common case is the Poisson source. See Choose the equation.
  • Too few points, too small a network, too few epochs. These show up in the loss curve and the result, not in the check.

If the graph is clean and the result is wrong, the next place to look is the loss curve. Run the script lists what to open.