@webwriter/neural-network
Version:
Deep learning visualization for feed-forward networks with custom datasets, training and prediction.
93 lines (83 loc) • 3.58 kB
text/typescript
import { LitElementWw } from '@webwriter/lit'
import { TemplateResult, html } from 'lit'
import { customElement } from 'lit/decorators.js'
import { consume } from '@lit/context'
import { editableContext } from '@/contexts/editable_context'
import type { Settings } from '@/types/settings'
import { settingsContext } from '@/contexts/settings_context'
import { InputLayer } from '@/components/network/input_layer'
import { OutputLayer } from '@/components/network/output_layer'
import { CNeuron } from '@/components/network/neuron'
import type { DataSet } from '@/types/data_set'
import { dataSetContext } from '@/contexts/data_set_context'
import { DataSetUtils } from '@/utils/data_set_utils'
import type { SelectedEle } from '@/types/selected_ele'
import { selectedEleContext } from '@/contexts/selected_ele_context'
import { NeuronInfoCard } from '../cards/neuron_info_card'
import { NeuronFeatureCard } from '../cards/neuron_feature_card'
import { PlotsCard } from '../cards/plots_card'
import { NeuronInputsCard } from '../cards/neuron_inputs_card'
import { NeuronActivationCard } from '../cards/neuron_activation_card'
import { NeuronLabelCard } from '../cards/neuron_label_card'
import { NeuronOutputsCard } from '../cards/neuron_outputs_card'
import { CPanel } from '../reusables/c-panel'
export class NeuronPanel extends LitElementWw {
static scopedElements = {
'c-panel': CPanel,
'neuron-info-card': NeuronInfoCard,
'neuron-feature-card': NeuronFeatureCard,
'plots-card': PlotsCard,
'neuron-inputs-card': NeuronInputsCard,
'neuron-activation-card': NeuronActivationCard,
'neuron-label-card': NeuronLabelCard,
'neuron-outputs-card': NeuronOutputsCard
}
({ context: editableContext, subscribe: true })
accessor editable: boolean
({ context: settingsContext, subscribe: true })
accessor settings: Settings
({ context: dataSetContext, subscribe: true })
accessor dataSet: DataSet
({ context: selectedEleContext, subscribe: true })
accessor selectedEle: SelectedEle
// RENDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
render(): TemplateResult<1> {
if (this.selectedEle && this.selectedEle instanceof CNeuron) {
const neuron: CNeuron = this.selectedEle
return html`
<c-panel name="neuron">
<neuron-info-card .neuron=${neuron}></neuron-info-card>
${neuron.layer instanceof InputLayer
? html`
<neuron-feature-card
.neuron=${neuron}
.featureDesc=${DataSetUtils.getDataSetInputByKey(
this.dataSet,
neuron.key
)}
></neuron-feature-card>
${(this.editable || this.settings.showPlots) && neuron.key
? html` <plots-card .featureKey=${neuron.key}></plots-card> `
: html``}
`
: html`
<neuron-inputs-card .neuron=${neuron}></neuron-inputs-card>
<neuron-activation-card
.neuron=${neuron}
></neuron-activation-card>
`}
${neuron.layer instanceof OutputLayer
? html`
<neuron-label-card
.neuron=${neuron}
.labelDesc=${this.dataSet.labelDesc}
></neuron-label-card>
`
: html`
<neuron-outputs-card .neuron=${neuron}></neuron-outputs-card>
`}
</c-panel>
`
}
}
}