2023年01月09日

pyinstallerでexe化するとログ関係でエラー

console Trueだとエラーにならないが、Falseにすると

Traceback (most recent call last):
File "logging\__init__.py", line 1086, in emit
AttributeError: 'NoneType' object has no attribute 'write'

などと出る。


#fp = open('./ログファイル.txt', 'w')
#sys.stderr = fp
#sys.stdout = fp

とログの出力先を指定してもいけるっぽいが


https://github.com/kivy/kivy/issues/8074

pip install pyinstaller==5.6.2 pyinstaller-hooks-contrib==2022.13

を見てバージョン下げたらとりあえず動作しました。

投稿者 muuming : 14:31 | コメント (0)

2022年11月19日

open cvで画像重ね

import cv2
import numpy as np
import math

mini = cv2.imread("2763.jpg")

dist = cv2.imread("GGF_6277.jpg")
h,w,c = dist.shape

move_matrix = np.array([[1,0,100],[0,1,50],[0,0,1]]).astype(np.float32)

matrix = move_matrix[0:2, 0:3]

gattai_img = cv2.warpAffine(src=mini,M=matrix,dsize=(w,h),dst=dist,flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_TRANSPARENT)

cv2.imshow("",gattai_img)
cv2.waitKey(0)

投稿者 muuming : 05:48

2022年10月30日

環境準備

環境ぶっ壊して元通りにするとき用のメモ

python インストール(今は3.9系)
非公式だけどここが見やすいとのこと
https://pythonlinks.python.jp/ja/index.html

今回は python-3.9.13-amd64.exe 

インストールしてPATH通し
C:\Users\UserName\AppData\Local\Programs\Python\Python39
C:\Users\UserName\AppData\Local\Programs\Python\Python39\Scripts

必要なライブラリインストール
pip install numpy
pip install psutil
#dlibインストールに必要
pip install wheel
pip install CMake

#pip install dlib たとCUDAが有効になっていてexe時にファイルサイズ大きすぎた
pip install -v --install-option="--no" --install-option="DLIB_USE_CUDA" dlib


pip install opencv-python
pip install pip natsort
pip install pyzbar

#kivy関連 https://kivy.org/doc/stable/gettingstarted/installation.html
python -m pip install --upgrade pip setuptools virtualenv
python -m pip install "kivy[base]"

#pyinstaller
pip install pyinstaller

#tflite

bazelインストール
https://github.com/bazelbuild/bazel

右のlatestから(今回は5.3.2) exeで該当するものをダウンロード
どこかに置いてpath通す

https://www.tensorflow.org/install/source_windows?hl=ja
pip install six numpy wheel
pip install keras_applications==1.0.6 --no-deps
pip install keras_preprocessing==1.0.5 --no-deps

pacman -S git patch unzip

#**************多分ここいらないかも*********
python ./configure.py
TensorFlow with ROCm support N
TensorFlow with CUDA support N
#***********************
tensorflow\lite\tools\pip_package

後で ./build_pip_package_with_bazel.sh: line 125: python3: command not found
と怒られるので python.exeを python3.exeにコピー

git bash hereで
./build_pip_package_with_bazel.sh windows

+ exit 0
で正常終了

W:\tensorflow\tensorflow\lite\tools\pip_package\gen\tflite_pip\python3\dist
に tflite_runtime-2.12.0-cp39-cp39-win_amd64.whl
これをインストール pip install tflite_runtime-2.12.0-cp39-cp39-win_amd64.whl


----------------------
tf-bodypixをtfliteで使いたい

pip install tf-bodypix[tflite]

投稿者 muuming : 05:01

2022年10月27日

写真のソート

写真を撮影時刻順に並べる

pip install image-sorting-tool
image-sorting-tool

投稿者 muuming : 12:37 | コメント (0)

2022年10月15日

tensorflow GPU複数使い

シーケンシャルモデルの作成とコンパイルをMirroredStrategyの中に入れる

mirrored_strategy = tf.distribute.MirroredStrategy()
with mirrored_strategy.scope():
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])
model.compile(loss='mse', optimizer='sgd')

model.fitはMirrored Strategyに入れない




◆Subclassing APの場合Iは???
  ネット探しても出てこないなぁ。

投稿者 muuming : 06:27

2022年08月20日

kivy インストール手順メモ

どうもgifファイルがkivyで読み込めなくなった。
エラー出てた

治ったのでやったことをそのまま記載。何が悪かったのかは不明

kivy関連全部アンインストール
https://kivy.org/doc/stable/gettingstarted/installation.html#install-pip

このページの通り
python -m virtualenv kivy_venv
kivy_venv\Scripts\activate

python -m pip install "kivy[base]" kivy_examples
これだけ 以前はあれ入れこれ入れ手動だったがこれでいけるっぽい

念のために今のところ入っているバージョンを記録


certifi 2022.6.15
charset-normalizer 2.1.1
cmake 3.24.1
Cython 0.29.32
dlib 19.24.0
docutils 0.19
h5py 3.7.0
idna 3.3
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.2
Kivy 2.1.0
kivy-deps.angle 0.3.2
kivy-deps.glew 0.3.1
kivy-deps.sdl2 0.4.5
Kivy-examples 2.1.0
Kivy-Garden 0.1.5
natsort 8.1.0
numpy 1.23.2
opencv-python 4.6.0.66
Pillow 9.2.0
pip 22.2.2
psutil 5.9.1
pygame 2.1.2
Pygments 2.13.0
pypiwin32 223
pywin32 304
pyzbar 0.1.9
requests 2.28.1
setuptools 58.1.0
six 1.16.0
tflite-runtime 2.11.0
urllib3 1.26.11
wheel 0.37.1


python 3.9

投稿者 muuming : 11:15

2022年08月13日

tensorflow lite の利用

まず学習したモデルを変換する
tflite_convert \
--saved_model_dir=モデルへの相対パス \
--output_file=モデルの保存先

拡張子は  .tflite をよく使うみたい

------------------------
import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model("ALL_HALF_51")
tflite_model = converter.convert()
open("test_model.tflite", "wb").write(tflite_model)
-------------------------------
pythonスクリプトでも行ける

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

推論
import numpy as np
import tensorflow as tf

# Load the TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test the model on random input data.
input_shape = input_details[0]['shape']
input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()

# The function `get_tensor()` returns a copy of the tensor data.
# Use `tensor()` in order to get a pointer to the tensor.
output_data = interpreter.get_tensor(output_details[0]['index'])
print(output_data)

投稿者 muuming : 21:43

2022年08月11日

機械学習データ

Googleから画像を一括でダウンロードできるツール「google-images-download」がオススメです。
googleimagesdownload --keywords "ツインテール 女子"

投稿者 muuming : 10:49

2022年08月10日

tensorflow2でかすぎ

tensorflow使っているものをexe化しようとしたらでかすぎ

https://stackoverflow.com/questions/61796196/heroku-tensorflow-2-2-1-too-large-for-deployment

Solution:
Simply replace tensorflow with tensorflow-cpu in your requirements.

GPU対応いらないなら差し替えれば小さくできるよってことっぽい

これは import tensorflow-cpu とかするんじゃなく

pip install tensorflow-cpu で tensorflow自体がcpuモードのものがインストールされるようだ。
なのでPGは変えずにexe化する時にだけcpuモードのものをインストールして梱包すればよいっぽい?
よくわかってない

投稿者 muuming : 16:08

2022年08月08日

pip install version指定

現行のバージョン確認
python

>>import cv2
>>cv2.__version__

pip uninstall opencv-python
インストールできるバージョンの確認
pip install opencv-python==100

とありえないバージョンを入れればエラーとして入れれるバージョンが表示されるので選んで
pip install opencv-python==3.4.5.20

投稿者 muuming : 15:15

2022年06月16日

np.where 複数条件

np.where(( (y_test == 5) | (y_test == 2)), 1, 0)

1,カッコが無いと動かない
2,orではなく|

投稿者 muuming : 06:07

2022年05月19日

kivyでgifの読み込みが失敗する

[ERROR ] [Image ] Error loading

勝手な推測だが、kivy自体はgifなんてわかんないのかもしれない。
ffmpegもしくはPillowインストールで解決した

python -m pip install Pillow

投稿者 muuming : 14:20

2022年02月08日

kivyのexe化でthred使ってる場合

kivyのexe化でmultiprocessing使ってる場合 exeのを実行したら、multiprocessing側の処理でも空のwindowが表示される
よくわからないけどimportしてる段階でwindowオブジェクトを作ってるようだ。

なのでkivy関連のimportを


if __name__ == "__main__" and len(sys.argv) == 1:
from kivy.uix.floatlayout import FloatLayout

といった感じにしておけばexeにしてもうまくいった。thread内でkivyのライブラリが必要な場合は知らね。

別件?でwindowsの場合multiprocessingの処理が固まるのか強制終了するのかおかしかった
これは
from multiprocessing import Process, Queue, freeze_support
freeze_support()

でうまくいいった

投稿者 muuming : 17:04

2022年01月21日

python 標準出力の取得

1,テキストへ
import sys
sys.stdout = open(str(os.getpid()) + ".out", "w", buffering=0) #これでバファリンぐが無くなる!?
print "HELLO WORLD!" #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
sys.stdout.close()

#いつもの標準出力に戻す
sys.stdout = sys.__stdout__


2,データとして取得

import sys
import io
fp = io.StringIO("")
sys.stdout = fp
print("HELLO WORLD!") #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
#sys.stdout.close()
print("poge")
sys.stdout = sys.__stdout__
print("ぽにょ")
print(fp.getvalue())

投稿者 muuming : 18:00

2022年01月05日

python kivyのスレッド

python自体にスレッドの仕組みは入っている

thread = threading.Thread(target=self.showImg, args=(path,file))
thread.start()

とかすれば動作します。


が、しかし、しかしながらkivyの場合はメインスレッド以外から表示を変更することには対応していないよう。画像の表示を変更しようとしても真黒になるだけでした。

こういう時はkivyについてるスレッドの仕組み
Clock.schedule_once(...)
を使うと良いらしい

https://github.com/kivy/kivy/issues/1317

結局 画像を作る重い処理は threading.Thread( で後ろに回して
表で Clock.schedule_interval(self.updateImg, 0.2) として繰り返して 画像が出来上がってたら表示変更という流れにしました。表示変更終わったら Clock.unschedule(self.updateImg) しました

メインスレッド以外での画面更新はやはり対応していないっぽい
Clock.schedule_once や Clock.unscheduleもメインスレッドだと理解した。正しいのかはわからないがw

投稿者 muuming : 15:10

2021年12月31日

dlibがマルチバイトでこける件

dlib.simple_object_detector("ある.dat".encode('Shift_JIS'))

多分プラットフォーム関係なしにutf-8でそのまま渡してるんじゃないかな。

windowsの場合 ↑のように文字コード変換して渡したらうまくいった。


が、windowsの場合でもutf-8で動いてることもあるらしいし、結局OSごとに分けたりも出来ないので、shutil.copyfileでコピーして相対パスで確実にマルチバイト入っていない状況にしてあげてから動作させた。これなら場合分け必要ない。

投稿者 muuming : 10:46

2021年12月26日

kivy exe化

https://kivy.org/doc/stable/guide/packaging-windows.html

python -m PyInstaller --onefile --name myapp myapp.py

で出来たspecを弄る

頭に
from kivy_deps import sdl2, glew

exe = EXE(pyz,
の部分に
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],

と exeに取り込む画像類が入ったフォルダを指定

Tree('parts\\'),

a.datas += [
('maru.png', '.\\maru.png', 'DATA'),
('back.png', '.\\back.png', 'DATA'),
('back_press.png', '.\\back_press.png', 'DATA'),
('btnbg.png', '.\\btnbg.png', 'DATA'),
('next.png', '.\\next.png', 'DATA'),
('next_press.png', '.\\next_press.png', 'DATA'),
('select.png', '.\\select.png', 'DATA'),
('my_detector.dat', '.\\my_detector.dat', 'DATA'),
('my_predictor_waku.dat', '.\\my_predictor_waku.dat', 'DATA'),
('ipaexg.ttf', '.\\ipaexg.ttf', 'DATA')
]

で個別にも入れれる


exe = EXE(pyz,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
Tree('parts\\'),
name='idcutter',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )

pyinstaller test.spec

投稿者 muuming : 22:26

2021年12月23日

kivy 自分の範囲内であるか?

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):

投稿者 muuming : 06:23

2021年12月17日

kivyで値を監視して変化があればfireさせる

kivyで値を監視して変化があればfireさせるためには

class MenuButton(Button):
	def __init__(self, **kwargs):
		super(MenuButton, self).__init__(**kwargs)
		self.hoge = 11
	def on_hoge(self,*argv):

ではだめで


class MenuButton(Button):
hoge = NumericProperty(66)
def on_hoge(self,*argv):

で動作する。なんでもかんでも監視してるわけでは無いのね。

投稿者 muuming : 10:35

2021年11月12日

python helpをファイルに保存

import sys
import pydoc
f = open("out.txt", 'w')
sys.stdout = f
pydoc.help(Button)
f.close()
sys.exit()

投稿者 muuming : 10:45

2021年11月10日

kivyのボタンの色がオカシイ

https://stackoverflow.com/questions/20181250/changing-the-background-color-of-a-button-in-kivy

色の指定をしてもくすんだ色になってしまう。

background_normal: ''
も合わせて指定すれば思った色になる

押したときの色の変化は
background_downによるものか?


background_normal: ''


押された時の色は別途変えないといけない
Button:
text: 'RED'
background_normal: ''
background_color:1,0,0,1
on_press: self.background_color = (0,0,1,1)
on_release: self.background_color = (1,0,0,1)

投稿者 muuming : 11:30

kivyのレイアウト

https://qiita.com/kurodae/items/6f1dbd8427f159b63517

AnchorLayout
 anchor_xならleft, center, right
 anchor_yならtop, center, bottom 9つの位置指定ができるレイアウト
 アンカーレイアウトには一つしかwidgetを追加できない


BoxLayout
 ウィジェットを水平方向か垂直方向に並べるように配置するレイアウト
 self.orientation = "horizontal" or orientation

FloatLayout
 絶対位置を指定して配置
 ウィンドウの大きさを変えたりしてもオブジェクトはウィンドウに合わせて位置が変化することはない

GridLayout
 横に何個、縦に何個と指定してグリッドをうめていくようなレイアウト

投稿者 muuming : 07:59

kivyの勉強メモ

https://pyky.github.io/kivy-doc-ja/gettingstarted/properties.html

Kivyには、次のプロパティが用意されています。
NumericProperty, StringProperty, ListProperty, ObjectProperty, BooleanProperty, BoundedNumericProperty, OptionProperty, ReferenceListProperty, AliasProperty, DictProperty,


これは


class MyClass(object):
def __init__(self):
super(MyClass, self).__init__()
self.numeric_var = 1

こう書けばいいんだけどね・・


-----------------------------------------
https://senablog.com/python-kivy-widget/

ウィジェットの種類について
ウィジェットは以下の5種類に分類できます

UXウィジェット:「ラベル・ボタン・テキストボックス」などの一般的なウィジェット
レイアウト:「ボックスレイアウト・フロートレイアウト」などの配置の方法を指定したりするウィジェット
複合UXウィジェット:「ドロップダウンリスト・ポップアップ」などの複数のウィジェットを組み合わせたウィジェット
図形ウィジェット:Scatter・StencilView
スクリーンマネージャー:スクリーンマネージャー
UXウィジェットの種類
UXウィジェットに分類されるウィジェットは以下の10種類です

ラベル:kivy.uix.label ※リンク:ラベルの基本的な使い方
ボタン:kivy.uix.button ※リンク:ボタンの基本的な使い方
チェックボックス:kivy.uix.checkbox ※リンク:Kivyのチェックボックスの基本的な使い方
テキストボックス:kivy.uix.textinput ※リンク:テキストボックスの実装方法
画像:kivy.uix.image ※リンク:Kivyで背景に画像を表示する方法
スライダ-:kivy.uix.slider
プログレスバー:kivy.uix.progressbar ※リンク:Kivyでプログレスバーを実装する方法
トグルボタン:kivy.uix.togglebutton
スイッチ:kivy.uix.switch
ビデオ:kivy.uix.video
レイアウトの種類
レイアウトに分類されるウィジェットは以下の8種類です

アンカーレイアウト: kivy.uix.anchorlayout
ボックスレイアウト: kivy.uix.boxlayout
フロートレイアウト: kivy.uix.floatlayout
グリッドレイアウト: kivy.uix.gridlayout
ページレイアウト: kivy.uix.pagelayout
相対レイアウト: kivy.uix.relativelayout
散布図レイアウト: kivy.uix.scatterlayout
スタックレイアウト: kivy.uix.stacklayout

投稿者 muuming : 06:54

2021年10月19日

opencvアフィン変換

参考 https://imagingsolution.net/imaging/affine-transformation/

#拡大縮小
scale_matrix = np.array([[scale_x,0,0],[0,scale_y,0],[0,0,1]])

#回転
rotation_matrix = np.array([[math.cos(math.radians(deg)) , -math.sin(math.radians(deg)) , 0.0],[math.sin(math.radians(deg)) , math.cos(math.radians(deg)) , 0.0],[0,0,1]])

#移動
move_matrix = np.array([[1,0,move_x],[0,1,move_y],[0,0,1]])


#拡大して → 回転して → 移動する場合 この順で
matrix_all = move_matrix.dot(rotation_matrix).dot(scale_matrix)

#cv2で使う部分を切り取り
matrix = matrix_tmp[0:2,0:3]

affine_img = cv2.warpAffine(useImg, matrix, (new_w,new_h))#最後の引数は出力サイズ 

投稿者 muuming : 12:56 | コメント (0)

2021年09月21日

python exe化

python exe化って簡単なのね。

https://techacademy.jp/magazine/18963

pip install pyinstaller
pyinstaller pythonファイル名

投稿者 muuming : 10:00

2020年12月27日

numpy 範囲指定でアクセス

[[0,1,2]
[3,4,5]]

a[0,2] => php的な書き方だと a[0][2] つまり 2

a[:,0] 一次元目は全部 2次元目は一つ目のみ [0,3]

深くはわかってないのでその都度テストしよう

投稿者 muuming : 20:07

python の引数のコロン

def training_step(g: generator, d: Discriminator,

などのコロン以降は説明との事。無くても動くしチェックも基本されないそうな。

投稿者 muuming : 17:08

損失関数あれこれ

tf.keras.losses.SparseCategoricalCrossentropy 入力がラベルidの数値単体の場合
tf.keras.losses.CategoricalCrossentropy 入力がone-hotの場合
■交差エントロピー
真の確率分布pは(1, 0, 0)
推定した確率分布qが(0.8, 0.1, 0.1)
損失 = −(1∗log0.8 + 0∗log0.1 + 0∗log0.1)

#正解の推定確率分布しか見てない

----------------

BinaryCrossentropy
#不正解の確率分布も正しさの確認に含める
損失 = −(1∗log0.8 + 1∗log(1-0.1) + 1∗log(1-0.1)) / 3

----------------
from_logits=True について
基本 from_logits=False なので通常は予測値を渡すときにsoftmaxで値の合計1にして渡すが、それなしにdense(10)とかを放り込むときは from_logits=True にするといけるっぽいが中身までは把握してない。

-----------------

tf.keras.losses.MeanSquaredError
平均2乗誤差 MSE
((y_real_1 - y_yosoku1)^2 + (y_real_2 - y_yosoku2)^2 + ... ) / n

いずれも各データの平均値を返す。合計値ではない。

あんまり関係ないけど googleの検索計算では log(0.6)で計算すると底は10
底を自然対数にするには ln(0.6)とln使います。

投稿者 muuming : 11:27

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

2020年05月09日

pythonメモ

print_rっぽいの
from pprint import pprint
pprint(y2)

なんのオブジェクトか
print(type(y2))

pandasのマニュアル
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html

投稿者 muuming : 05:02