/**
 * Attention layer
 */
export default class AttentionLayer extends Layer {
    /**
     * @param {object} config object
     * @param {number} [config.dk] Inner depth size
     * @param {number} [config.dv] Output depth size
     * @param {number[][] | Matrix | string} [config.wq] Weight of q
     * @param {number[][] | Matrix | string} [config.wk] Weight of k
     * @param {number[][] | Matrix | string} [config.wv] Weight of v
     */
    constructor({ dk, dv, wq, wk, wv, ...rest }: {
        dk?: number;
        dv?: number;
        wq?: number[][] | Matrix | string;
        wk?: number[][] | Matrix | string;
        wv?: number[][] | Matrix | string;
    });
    _dk: number;
    _dv: number;
    _wq: Matrix<number>;
    _wqname: string;
    _wk: Matrix<number>;
    _wkname: string;
    _wv: Matrix<number>;
    _wvname: string;
    calc(x: any, memory: any): Tensor;
    _selfattention: boolean;
    _i: any;
    _m: any;
    _q: any;
    _k: any;
    _v: any;
    _atn: Tensor;
    _matmul(a: any, b: any, transpose_a?: boolean, transpose_b?: boolean): Tensor;
    grad(bo: any): Tensor | {}[];
    _dwv: any;
    _dwq: any;
    _dwk: any;
    update(optimizer: any): void;
    toObject(): {
        type: string;
        dk: number;
        dv: number;
        wq: string | number[][];
        wk: string | number[][];
        wv: string | number[][];
    };
}
import Layer from './base.js';
import Matrix from '../../../util/matrix.js';
import Tensor from '../../../util/tensor.js';
