トップ «前の日記(2016-09-07) 最新 次の日記(2016-09-14)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ToDo:


2016-09-12

_ 機械学習と型づけと

https://twitter.com/jmuk/status/775178305481740288

たぶん型付けるって話に2種類あって、

  • save_model(string filename, Model model) に引数を逆に渡してウキョーとか、 save_mode と typo してウキョーとか、そういうのを静的型付けによって防ごうって話
  • matmul(A, B, C) の A, B, C の次元が正しいかどうかを静的型付けによってチェックしようという話

で、前者を mame さんが想定してて、むかいさんは後者を想定してるのではないかな、と思う。前者は正直 closure compiler とか程度のやつでも相当たすかると僕の感覚では思うし、後者は次元数てのは静的に決まるものでなく、モデルに保存されてたりするので「面白い話題がある領域では」と思うのもすごくよくわかる

後者は僕も不勉強なので確信は持てないのだけど、たぶんむかいさんの理解通り、あまり既存研究とかが多く無い(実用化されてるものを僕は知らない)領域なのではないかな、と思う。

C++でいうと、templateに型を与えたり定数値を与えたりはできるわけだけど、変数値ではあるものの、プログラムの実行中は値を変えない何か、を型パラメータにしたいのかな、と思う。僕が知ってる中で、これを不十分に実現してるふうを装えそうなものとしては、 D 言語の alias template が使えるかもしれないな、とか思う

import core.stdc.stdio;
import core.vararg;

int vector_dim3;
int vector_dim4;

template Vector(alias dim) {
  class Vector {
    this(...) {
      assert(_arguments.length == dim);
      v = new int[](dim);
      for (int i = 0; i < dim; i++) {
        v[i] = va_arg!int(_argptr);
      }
    }

    int inner_product(Vector!(dim) o) {
      int r = 0;
      for (int i = 0; i < dim; i++) {
        r += v[i] * o.v[i];
      }
      return r;
    }

    int[] v;
  }
}

void main() {
  vector_dim3 = 3;
  vector_dim4 = 4;

  auto v3_1 = new Vector!(vector_dim3)(1, 2, 3);
  auto v3_2 = new Vector!(vector_dim3)(3, 2, 1);
  printf("%d\n", v3_1.inner_product(v3_2));  // OK - 10

  auto v4_1 = new Vector!(vector_dim4)(1, 2, 3, 4);
  auto v4_2 = new Vector!(vector_dim4)(4, 3, 2, 1);
  printf("%d\n", v4_1.inner_product(v4_2));  // OK - 20

  // Not OK! (dimension mismatch) - statically checked
  // printf("%d\n", v3_1.inner_product(v4_1));

  // Not OK! (argument number mismatch) - runtime assertion failure
  // auto v_err = new Vector!(vector_dim3)(1, 2);
}

(22:25)

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

2016年
9月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
1.shinh(2016-10-11 02:14) 2.匿名(2016-10-09 11:26)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h