« 2020年05月 | メイン | 2020年07月 »

2020年06月24日

pythonに出てくる軸ってなんだ?


 Array
        (
            [0] => Array
                (
                    [0] => 0
                    [1] => 1
                    [2] => 2
                )

            [1] => Array
                (
                    [0] => 3
                    [1] => 4
                    [2] => 5
                )
*/
//3番目の$qを潰してる  axis=2
$b = array();
for ($i = 0;$i < 3;++$i) {
	for ($p = 0;$p < 3;++$p) {
		for ($q = 0;$q < 3;++$q) {
			@$b[$i][$p] = $b[$i][$p] + $a[$i][$p][$q];
		}
	}
}

print_r($b);

//2番目の$pを潰してる  axis=1
$b = array();
for ($i = 0;$i < 3;++$i) {
	for ($p = 0;$p < 3;++$p) {
		for ($q = 0;$q < 3;++$q) {
			@$b[$i][$q] += $a[$i][$p][$q];
		}
	}
}

print_r($b);

//1番目の$iを潰してる  axis=1
$b = array();
for ($i = 0;$i < 3;++$i) {
	for ($p = 0;$p < 3;++$p) {
		for ($q = 0;$q < 3;++$q) {
			@$b[$p][$q] += $a[$i][$p][$q];
		}
	}
}

print_r($b);

//2番目と3番目を潰してる  axis=(1,2)
$b = array();
for ($i = 0;$i < 3;++$i) {
	for ($p = 0;$p < 3;++$p) {
		for ($q = 0;$q < 3;++$q) {
			@$b[$i] += $a[$i][$p][$q];
		}
	}
}

print_r($b);

投稿者 muuming : 07:10

2020年06月19日

numpy onehotに変換

a = [3, 0, 8, 1, 9]
a_one_hot = np.identity(10)[a]

投稿者 muuming : 15:24

tensorfklow2カスタマイズング

https://www.atmarkit.co.jp/ait/articles/2003/23/news024.html

基本パターン
 TensorFlow 2.xでは、

活性化関数: tf.keras.layers.Layerクラスをサブクラス化
レイヤー: tf.keras.layers.Layerクラスをサブクラス化
オプティマイザ(最適化アルゴリズム): tf.keras.optimizers.Optimizerクラスをサブクラス化
損失関数: tf.keras.losses.Lossクラスをサブクラス化
評価関数: tf.keras.metrics.Metricクラスをサブクラス化
などの機能がカスタマイズ可能である


各損失関数の中身は ここ Numpy backend にあった
----------------------------------
# カスタムの損失関数のPython関数を実装
def custom_loss(y_true, y_pred):
    return tf.reduce_mean(tf.square(y_true - y_pred))

# カスタムの損失関数クラスを実装(レイヤーのサブクラス化)
# (tf.keras.losses.MeanSquaredError()の代わり)
class CustomLoss(tf.keras.losses.Loss):
  def __init__(self, name="custom_loss", **kwargs):
    super(CustomLoss, self).__init__(name=name, **kwargs)

  def call(self, y_true, y_pred):
    y_pred = tf.convert_to_tensor(y_pred)  # 念のためTensor化
    y_true = tf.cast(y_true, y_pred.dtype) # 念のため同じデータ型化
    return custom_loss(y_true, y_pred)
----------------------------------


----------------------------------
# カスタムの活性化関数のPython関数を実装
def custom_activation(x):
    return (tf.exp(x)-tf.exp(-x))/(tf.exp(x)+tf.exp(-x))

# カスタムの活性化関数クラスを実装(レイヤーのサブクラス化)
# (tf.keras.layers.Activation()の代わり)
class CustomActivation(tf.keras.layers.Layer):
  def __init__(self, **kwargs):
    super(CustomActivation, self).__init__(**kwargs)

  def call(self, inputs):
    return custom_activation(inputs)
-------------------------------------

-------------------------------------
# 正解かどうかを判定する関数を実装
def custom_matches(y_true, y_pred):         # y_trueは正解、y_predは予測(出力)
  threshold = tf.cast(0.0, y_pred.dtype)              # -1か1かを分ける閾値を作成
  y_pred = tf.cast(y_pred >= threshold, y_pred.dtype) # 閾値未満で0、以上で1に変換
  # 2倍して-1.0することで、0/1を-1.0/1.0にスケール変換して正解率を計算
  return tf.equal(y_true, y_pred * 2 - 1.0) # 正解かどうかのデータ(平均はしていない)

# カスタムの評価関数クラスを実装(サブクラス化)
# (tf.keras.metrics.BinaryAccuracy()の代わり)
class CustomAccuracy(tf.keras.metrics.Mean):
  def __init__(self, name='custom_accuracy', dtype=None):
    super(CustomAccuracy, self).__init__(name, dtype)

  # 正解率の状態を更新する際に呼び出される関数をカスタマイズ
  def update_state(self, y_true, y_pred, sample_weight=None):
    matches = custom_matches(y_true, y_pred)
    return super(CustomAccuracy, self).update_state(
        matches, sample_weight=sample_weight) # ※平均は内部で自動的に取ってくれる
----------------------------------


投稿者 muuming : 05:35