Почему в этой структуре нет инициализатора и значений по умолчанию?(трансформатор в Swift для тензорного потока) - PullRequest
0 голосов
/ 11 мая 2019
  1. Структура TransformerLM не инициализирует свои переменные-члены. Почему это будет работать?
  2. Структура TransformerLM не имеет инициализатора или значения по умолчанию, почему let model = TransformerLM(contentsOfPythonCheckpointFile: checkpoint, config: config, scope: "model") может работать?
struct TransformerLM {
    var embedding: Embedding
    var positionalEmbeddings: Tensor<Float>
    var layers: [EncoderLayer]
    var norm: LayerNorm<Float>

    func call(_ tokens: Tensor<Int32>, states: inout [AttentionContext]) -> Tensor<Float> {
        let positions = (0..<tokens.shape[1]).map { Int32($0 + states[0].key.shape[1]) }
        let positionsTensor = Tensor<Int32>(shape: [1, tokens.shape[1]], scalars: positions)
        var h = embedding(tokens)
        h = h + positionalEmbeddings.gathering(atIndices: positionsTensor)
        for i in 0..<layers.count {
            h = layers[i](h, state: &states[i])
        }
        h = norm(h)
        let tmp = TimeDistributed(
            Dense(weight: embedding.weight.transposed(), bias: Tensor(0.0), activation: identity))
        let logits = tmp(h) // a somewhat hacky way to share weights
        return logits
}

git: определение
вызов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...