- 1. SSIMオートエンコーダ(全結合層)による異常検知
- 2. pythonの真偽値と条件分岐
- 3. sparse_categorical_crossentropyとMIoUの共存
- 4. 【Python】文字整数 昇順ソートリスト作成 レシピ
- 5. PyTorchの乱数シード固定【GPU】
- 6. seleniumチートシート(Windows&Python編)
- 7. Python3なら4行で単一換字式暗号化プログラムができた
- 8. 論文でよく使うmatplotlib subplotsの覚え書き
- 9. 【備忘録】pip3 install TA-Lib でエラーが出た時の対処法
- 10. SimpleGUIのFileBrowseで一度選択したフォルダのパスをクリアする
- 11. Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その2
- 12. SQLModelを試してみた
- 13. 【AWS CDK】Batchで起動テンプレートを利用する場合のユーザーデータの実装
- 14. AOJトライに関する知識知見の記録共有 (Volume0-0042)
- 15. [Python]途中まで素数を求める方法[オイラー]
- 16. pandasで、年のない月日のみのデータを to_datetimeしたら1990年になってしまったときの対処法
- 17. 【python3】AttributeError: partially initialized module ‘XXX’ has no attribute ‘make’への対処
- 18. Pytorchのバージョンを確認、GPUの情報をワンライナーで確認
- 19. WSLでPythonのGUI表示をどうにかする
- 20. AWS VPCをプライベートサブネットか判定して作成するスクリプト
SSIMオートエンコーダ(全結合層)による異常検知
#背景
全結合層でオートエンコーダし、画像の異常検知を行う。
loss関数にSSIMを使用すれば構造的類似性の観点からより精度の良いオートエンコーダ結果が得られることから、MNISTデータを用いて検証する。
また、異常度の出し方を画像の輝度差分ではなくSSIMで出すことでどういう値になるかを確認する。
本ページはコードの記録のみとする。検証結果は別紙参照のこと。#やったこと
MNIST数字データで1のみを学習データに使用して全結合層オートエンコーダモデルを構築。1と9の混じったテストデータで9を異常と検知するか確認する。
異常度を算出し、ヒートマップで異常位置を可視化する。“`
#必要ライブラリ
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import tensorflow as tf
from tensorflow.keras.datasets import mnist
import tensorflow.keras#MNIST読み込み
(x_train, y_train),
pythonの真偽値と条件分岐
pythonで、Noneかどうか、空文字列かどうか、空配列かどうか、空辞書かどうかの判定とその時の処理の書き分けで迷いがちです。
それらを正しく書き分けるためには、何が`None`で何が`True/False`で、それらがどうやってや`if`文や比較演算子で処理されるのかをちゃんと理解する必要があると思っています。
そこで、ここでは、python3の真偽判定とその時の条件分岐について書こうと思います。
## この記事を書こうと思った訳
条件式は色々な書き方ができますが、推奨されている書き方や短く簡潔に書く方法があります。
[PEP8プログラミングに関する推奨事項](https://pep8-ja.readthedocs.io/ja/latest/#id42)にはこのように書かれています。
>> None のようなシングルトンと比較をする場合は、常に is か is not を使うべきです。絶対に等値演算子を使わないでください。
>> また、 本当は if x is not None と書いているつもりで、 if x と書いている場合は注意してください – たとえば、デフ
sparse_categorical_crossentropyとMIoUの共存
#この記事について
今回はsparse_categorical_crossentropyを使用した際に評価指標としてMIoUを使用する方法を紹介します。また、以下のサイトを参考にしております。
サイトによるとtf2.2,tf2.3,tf2.4で問題ないようです。参考:(https://github.com/tensorflow/tensorflow/issues/32875)
#sparse_categorical_crossentropyとMIoU
sparse_categorical_crosentropyは多クラス分類に使用される損失関数ですが、評価指数としてMIoUを使用するとエラーが発生してしまうことがありました。確認すると、入力の型が一致していなければならないそうです。#解決方法
以下のコードを使用することで解決することができます。“`
class UpdatedMeanIoU(tf.keras.metrics.MeanIoU):
def __init__(self,
y_true=None,
【Python】文字整数 昇順ソートリスト作成 レシピ
# 1.【やりたいこと】
“`python
array_1 = ’10 6 8 1 5 9 3 4 7 2′type(array_1)
> `class ‘str’`# やりたいこと
array_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`# 2.【作成レシピ】
使用メソッド
* 内包表記:array_1の文字型の整数をint型へ変換 (str型→int型)
* 組み込み関数:sorted()“`python
array_1 = ’10 6 8 1 5 9 3 4 7 2’# レシピ
array_2 = sorted([int(i) for i in array_1.split()])# 完成
array_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`
PyTorchの乱数シード固定【GPU】
# PyTorchの乱数シード固定方法
機械学習では、再現性を持たせるために、乱数のシードを固定することが多い。GPU使用時におけるPyTorch乱数シード固定を、PyTorchのドキュメントからまとめた。“`python
import random
import numpy as np
import torchdef torch_fix_seed(seed=42):
# Python random
random.seed(seed)
# Numpy
np.random.seed(seed)
# Pytorch
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
torch.use_deterministic_algorithms = Truetorch_fix_seed()
“`Pythonの組み込みモジュール、Numpy、PyTorchそれぞれの乱数シー
seleniumチートシート(Windows&Python編)
分類:Python3,Windows10,クロム
日付:2021/11/04seleniumの使い方を毎回忘れるのでチートシートにしました
#環境構築
###①クロムのバージョンチェック
メニュー右上の︙アイコンをクリック、→ ヘルプ → googleクロムについて を選ぶ
###②ダウンロードのページ
https://chromedriver.chromium.org/downl
Python3なら4行で単一換字式暗号化プログラムができた
(追記)fsdさんからコメントをいただき、それを参考にしたら、3行でコードが書けた。下のコメント欄に載せました。
(元記事)
ITエンジニア向け転職・就活・学習サービスサイトのスキルチェック問題に挑戦するなかで、「単一換字式暗号」がでてきた。(単一換字式暗号については、ググってください。)最初に提出したコードは`for`、`if`を多用していたので、満足のいくものはでなかった。そこで何種類か考えたなかで、次のコードは初心者なりにうまくできたと思った。
“`python3
plain = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz’ # 平字
cipher = ‘czQPHLsU rneVdEKfvyWSwIGCZqgoFBxtTiklDaOJRjNbAhmYMupX’ # 暗字# 換字表の作成
table = [i for i in range(128)]
for i in range(len(plain)):
table[ord(plain[i])] = ord(cipher[i])# 暗号
論文でよく使うmatplotlib subplotsの覚え書き
論文を書く際に複数枚のグラフの内,最も左にあるグラフのみx軸を表記し,最も下にあるグラフのみy軸を表記するという形式をよく利用するので覚え書きします.
また,左下隅のグラフのみ消すという操作もよく利用するので,customizeの例 (`ax.axis(‘off’)` によって可能です) に載せています.“`python
from dataclasses import dataclass
from typing import List, Optionalimport numpy as np
import matplotlib.pyplot as pltplt.rcParams[“font.family”] = “Times New Roman”
plt.rcParams[“font.size”] = 14@dataclass
class GridSpecKeywords:
“””
Attributes:
width_ratios, height_ratios (Optional[List[int]]):
Th
【備忘録】pip3 install TA-Lib でエラーが出た時の対処法
TA-Libインストールで手間取ったので、正常にインストールする手順を備忘録としてまとめます。
“`
pip3 install TA-Lib
“`上記実行すると、`ERROR: Failed building wheel for TA-Lib`のようなエラーが出てインストールできない。
以下、インストール手順
まず、homebrewでTA-Libをインストール“`
brew install TA-Lib
“`その後、pip3 でインストール
“`
pip3 install TA-Lib
“`これで正常にインストールできました。
SimpleGUIのFileBrowseで一度選択したフォルダのパスをクリアする
#背景
SimpleGUIのFileBrowseでファイルのパスを入手、再度空白に戻すという操作を紹介します。#コード紹介
コードは上半分でウィンドウレイアウト、下半分で挙動を定義しています。上半分のウィンドウレイアウトのコードは以下の通り。“`python:demo1.py
import PySimpleGUI as sgsg.theme(‘DarkTeal7’)
layout = [[sg.Input(key=”input_path”), sg.FileBrowse(‘Select’, key=’input_path2′)],
[sg.Button(‘submit’, key=’submit’),sg.Button(‘clear’, key=’-clear-‘) ],
[sg.Output(size=(60,20))],
]
window = sg.Window(‘ファイル選択’, layout)
“`
残り半分のコード。右上の×ボタン、submitボタン、clearボタンの挙動を定義。(敢えてelseを使
Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その2
#MySQL5.7のインストールと設定
以下のコマンドから実行する.“`
ttimes@xxx-xxx-xxxxxx:~$ sudo apt install python-dev python3-dev libmysqlclient-dev default-libmysqlclient-dev mysql-server
ttimes@xxx-xxx-xxxxxx:~$ sudo mysql_secure_installation
“`
セキュアインスタレーションを実行すると,パスワードのセキュリティレベルを設定し,パスワードを設定することになります.
普段からパスワード生成器を利用されている方は`2`にするといいと思います.
その後,①匿名ユーザを禁止するか ②リモートからのrootログインを禁止するか ③テストデータベースを削除しておくか ④ここまでの設定をすぐに反映するか を聞いてきます,基本的に全て`Yes`でいいと思っています.次はデータベース`ttimesdb`とユーザー`ttimes`に対する権限付与です.成功すれば,変更を反映するためにリロードしましょう.
SQLModelを試してみた
#SQLModelとは
公式はこちら現在PythonのWebFrameworkで最も注目されている(?)FastAPIの作者tiangolo氏による新しいPythonのORMである。
###特徴
Pythonの型付けを強力にサポートするPydanticと、有名なORMのSQLAlchemyをベースにラップしたもので、直感的で短いコードが書けてSQLAlchemyとの互換性も優れているようで、平たく言うと今までデータベースのスキーマをPydanticで定義していたが、SQLAlchemyとFastAPIを使う場合は不要になったということ(だろう)。早速試してみました。
—
環境 Ubuntu20.04 Pipenv Python3.8.10 MySQL8.0 VScode
###インストール
“`linux
pipenv install fastapi sqlmodel uvicorn
“`
とやるも…“`
Creating a Pipfile
【AWS CDK】Batchで起動テンプレートを利用する場合のユーザーデータの実装
Batchのコンピューティング環境で利用する起動テンプレートのユーザーデータは **MIME マルチパートアーカイブの形式** で定義しなければならないらしい。
CDKで実装するときに少しハマったので調べた内容を残しておく。https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/launch-templates.html#lt-user-data
# 実装
何はともあれ実装。こんな感じで実装するとうまくいく。
“`python
from aws_cdk import aws_ec2# UserDataインスタンスの作成
user_data = aws_ec2.MultipartUserData()# UserDataの中身を定義。
user_data.add_part(
# MIME マルチパートアーカイブの形式のUserDataを定義する
aws_ec2.MultipartBody.from_raw_body(
# データの種類を指定。今回はシェルスクリプト
AOJトライに関する知識知見の記録共有 (Volume0-0042)
# 概要
A Thiefhttps://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0042
# コード
TIPS:ビット演算での探索パターン制御“`
def ret_value_weight_items(items, w_limit=-1):
items = sorted(items, key=lambda x: -x[1])
le = len(items)
ret = []
for ptnbit in range(pow(2, le)):
its = [items[i] for i in range(le) if (ptnbit>>i)%2 == 1]
#print(its, ptn)
value, weight = [sum([v[idx] for v in its]) for idx in [0, 1]]
if weight <= w_limit: ret.append([value, we
[Python]途中まで素数を求める方法[オイラー]
# はじめに
Pythonでコーディングを行ったので、備忘録として残します。
Python環境下にて、是非お使いください。素数は、1とその数字以外に割ることができないものです。
これは、ある素数NはNはN-1の整数倍で表すことができないという意味でもあります。
この素数というのは素数係数関数(Π(x))や素数定理などの発見はあるものの、
素数を数式で表すことは現在できておりません。現在の主流な暗号方式であるRSA暗号は、100桁以上の素数の難発見性の性質を利用しているなど、IT技術にも貢献しているこの素数ですが、
nを整数としたとき、n^2-n+41が素数であることはn=40までは成り立つようです。今回は、コーディングとn=0~40の出力結果を以下に載せておくので、
参考までに御覧ください。
素数を詳しく知りたい方は、数学者ガウスやオイラーについて調べてみるといいでしょう。[参考]RSA暗号とは:https://qiita.com/YutaKase6/items/cd9e26d723809dc85928
※n^2-n+41は二次関数で、n=-1のとき43、n=-2の
pandasで、年のない月日のみのデータを to_datetimeしたら1990年になってしまったときの対処法
年の記載が無い、月日だけの日付データを to_datetime したら、全部1990年になってしまったので、年のデータを追加した方法を書いておきます。
## サンプルデータ
– [sample_data.csv](https://gist.githubusercontent.com/noanoa07/425e750a4d0f95e577a9ee32a5edb90e/raw/40b2d718031ba24ce996c58112fd984814889561/sample_data.csv)|年月日|平均気温(℃)|最高気温(℃)|最低気温(℃)|
|:—-|:—-|:—-|:—-|
|12月29日|7.3|12.4|1.9|
|12月30日|6.4|12.8|2.6|
|12月31日|3.0|7.1|-1.0|
|1月1日|2.9|9.7|-3.5|
|1月2日|3.6|9.9|-2.1|
|1月3日|3.0|7.5|-1.7|
|1月4日|4.9|11.2|-0.4|## pandasで読み込む
“`python
import pandas as pd
【python3】AttributeError: partially initialized module ‘XXX’ has no attribute ‘make’への対処
## 環境
Windows 10 Home
python 3.10## 状況
小さなコードをテスト実行中に遭遇した。
その時のコードと、実行したときのエラー内容を以下に示す。“`gym.py
import gymenv = gym.make(‘Pendulum-v1’)
env.reset()for i in range(20):
action = env.action_space.sample()
state, reward, done, info = env.step(action)print(f”action:{action}, state:{state}, reward:{reward}, done:{done}”)
“`“`
Traceback (most recent call last):
File “C:\Users\work\gym.py”, line 1, in
import gym
File “C:\Users\work\gym.py”, line 3, in
Pytorchのバージョンを確認、GPUの情報をワンライナーで確認
Pytorchのバージョンを確認
“`
python3 -c “import torch; print(torch.__version__);”
“`
GPUを使えるかどうかを確認“`
python3 -c “import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0));”
“`
WSLでPythonのGUI表示をどうにかする
# WSLでGUI表示したいという話
こんな話,インターネットの海には無限に転がっている
転がっているからといってできるとは言ってないのがこの分野ですよね以前にWSLのUbuntuからPyQt5で作ったアプリを立ち上げようとして,GUI周りで挫折したので,今回はリベンジ ~~(コマンドプロンプトはやっぱり作業しづらい)~~
## 環境
* Windows10
* WSL1(Ubuntu)
* Python3.7→3.8## とりあえず実行しようとしてみる
GUIの基本(?)「とりあえず画面を出す」をするため,matplotlibを使ったプログラムでグラフを画面出力しようとしてみると…
エラーが出た“`shell
WSL UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
“`とりあえずこちらを参考にVcXsrvを導入
https://qiita.com/rhene/items/ff11c7850
AWS VPCをプライベートサブネットか判定して作成するスクリプト
#普通にVPC作成すると、プライベートサブネットかどうかをバリデーションしてくれない
Amazon VPCはAWS上に構築するプライベートなネットワーク空間のことです。
ですが作成時にプライベートサブネットかどうかをバリデーションしてくれません。:weary:
意図せずパブリックなIPレンジでもVPCを作れてしまいます。
そのためプライベートサブネットか判定して作成するスクリプトを作成してみました。python3の標準モジュールであるipaddressモジュールが凄く便利です!
# 開発環境
Python3.8.7
#実装
(IAMユーザー作成、aws configureは割愛します)
例:VPCのCIDR 172.32.0.0/24 をboto3testのNameタグで作成しようとするとき“`python
import boto3
import ipaddressCIDR = ‘172.32.0.0/24’
def create_vpc(CIDR):
client = boto3.client(‘ec2’)
response = client.c