- 1. 環境構築:GCP+Docker
- 2. python tips
- 3. cronを使って起動したプログラムはインタラクティブにできない?
- 4. 最尤推定法が真のパラメータを見つけるまで
- 5. Django#2(テンプレート)
- 6. 8-bit grayscale画像へのダウンスケーリングと画像コントラスト
- 7. DJango で AES 暗号を行う
- 8. mecabの辞書による形態素解析結果の違い
- 9. PythonのコンソールをUNKOまみれにする
- 10. PartiQLとMongoDBを接続して遊んでみた
- 11. optunaに数独を解かせてみた
- 12. ディープラーニング用に自作PCを作ってUbuntu18.04の環境構築
- 13. 動画をリサイズして画像に直すpythonプログラム
- 14. Python初心者が「Python文法詳解」を読んだメモ #2
- 15. Jupyter NotebookをDockerを使って簡単にインストールし起動(Scalaにも対応)
- 16. MacのCatalinaさんでpyenv
- 17. pipを使ったmatplotlibのインストールでエラーが出て詰まった話
- 18. 【中級者への道】Pythonの*args, **kwargsって何?
- 19. [ゼロから作るDeep Learning]ソフトマックス関数から交差エントロピー誤差までのレイヤ実装
- 20. [python] スカラーの判定方法
環境構築:GCP+Docker
# 環境構築 備忘録
GCP上にコンテナを立てて、分析環境構築を行う。
今一分かってないけど、どうやって立てたかを自分用にまとめる。# GCPについて
GCPについては以下記事が非常によくまとまっているので読んでほしい。
このシリーズの第3回くらいまで読んでどんなものか大枠を把握した。
[【GCP入門編・第1回】エンジニア必読!今さら聞けない、Google Cloud Platform (GCP) とは?][1]アカウント作成は第2回に記載。
[【GCP入門編・第2回】まずは、ここから! Google Cloud Platform (GCP) の事前準備!][2]GCEについての説明
[【GCP入門編・第3回】難しくない! Google Compute Engine (GCE) でのインスタンス起動方法!][3]# GCE インスタンス作成
[GCPとDockerでKaggle用計算環境構築][4]
[GCP+DockerでKaggle用GPU環境構築][5]
2記事を主に参考にしたがDeepLearningVMを見つけられなかったために、
通常のインスタンス作成を行
python tips
# python tips まとめ
備忘録として残しておきます。## 文字→ascii。ascii→文字への変換
`ord`でアスキーコード取得
“`
>>> ord(‘a’)
97
“``chr` で文字取得
“`
>>> chr(97)
a
“`## リストの生成
リスト包括で書くと、メモリ保存しないから実行速度が速い。
“`.py
num = 1000000000# 通常の書き方
list = []
for i in range(num):
list.append(i)# リスト内包表記
list = [i for i in range(num)]
“`## さなざまなものを連結させる “join”
join では文字列、数値、パスを連結させることができます。
`” “.join`で使います。“`.py
list = [‘a’, ‘b’, ‘c’]
result = ”.join(list)
print(result)## abc
“`listに文字と数値がある場合、map関数でstrに全て変換
“
cronを使って起動したプログラムはインタラクティブにできない?
## cronでインタラクティブなプログラムを動かしたかった
某所で書籍の貸し出し履歴を追跡するというプロジェクトを動かしていて、バーコードが正しく読み込まれたかどうかのフィードバックや記録そのものにRaspberry Piを利用したい。ISBNに基づいて管理する予定なので、バーコードリーダーの入力を受け取って、「ちゃんとISBNが受け取れていたらOK、そうでなければNG」というフィードバックを返すようなプログラムをPythonで作成。
現場は非エンジニアの人ばかりで、仕事で使っているPCと社内LANからSSH接続して起動するというのは難しそうだったので、1. ラズパイを起動するタイミングでプログラムが実行されるようにcronを設定
2. 入力デバイスはバーコードリーダー、フィードバックはSense HatのLEDで表示するという最小限の構成を組み立てて、これでよし…と思った矢先。
## 入力を受けられない
入力を受ける前にEOF Errorを吐いてプログラムが落ちてることが分かった。入力デバイスの有無はどうやら関係ないっぽい。EOF Errorということは入力のストリー
最尤推定法が真のパラメータを見つけるまで
#はじめに
本記事では前記事を受けて、最尤推定法による推定値が試行数を重ねるごとに真の値に近づいていくことを観察してみます。
##目次
1.最尤推定法をとは
2.一致推定量とは
3.pythonでシミュレーション##1.最尤推定法とは
詳しくは[前記事](https://qiita.com/kthimuo/items/19cd2a64ca867f2f0a9c)をご覧ください。
ベルヌーイ分布の真の平均を最尤推定法で推定する場合、推定値$u_{ML}$は“`math
u_{ML} = \frac{1}{N} \sum_{i=0}^N x_i
“`
のようになります。
少ない試行回数では過学習してしまうのが最尤推定法の欠点でした。
しかし、試行回数を重ねると真の値に近づいていくことを示します。
試行回数を重ねていくと母平均や母分散に近づいていく値を一致推定量といいます。
次説では$u_{ML}$が一致推定量であることを示します。##2.一致推定量とは
任意の$\epsilon>0$に対して、$\hat{\theta}_n$が“`math
\lim_{n \to \in
Django#2(テンプレート)
# Djangoでテンプレートを使う
とりあえずの設定。以下のファイルを編集する。
– アプリ/views.py
– views.py内で定義した関数(ビュー関数)からテンプレートファイルを呼び出し、HTTPレスポンスを返す
– config/settings.py
– テンプレートファイルの置き場所を設定する
– template/テンプレート.html
– 実際のテンプレートファイル(ファイル名、サブディレクトリは任意)## ビュー関数を書く
とりあえずhelloに対応する内容。
“`python/app_name/views.py
from django.shortcuts import render # render(request, ‘hello.html’, context)
from django.http import HttpResponse # HttpResponse(‘Hello, World !!’)
from django.shortcuts import render
from django.views import View
8-bit grayscale画像へのダウンスケーリングと画像コントラスト
# 前提
ここでいうダウンスケーリングは、画像の標本化でいうところのダウンスケールを意味します。
# 画像のダウンスケーリング
ここでは、グレースケール画像を対象に話をします。
一般的に、グレースケール画像は8-bit, 16-bit, 32-bit等、「1チャンネル」の画素の集まりで構成されています。
(RGBなどのカラー画像は、R、G、Bそれぞれのチャンネルがあり、これらを統合して画像にしています。この点は重要です。言い換えれば、RGB画像は、8-bit grayscale画像が3枚分あると言えます。厳密にはα成分(透明度を指定する成分)がある場合もありますが、α成分も8-bit grayscale画像が一枚分増えたようなものです。)よく医用画像で使われるのが、16-bit画像です。
16-bit画像は、0-65535の間の数値をピクセル値として保持できます。
一方で、8-bit画像は、0-255までの数値しか保持できません。
(符号付き、符号なしについてはここでは敢えて触れません。)画像処理や機械学習などでは、計算を簡便にするために、あるいは処理を高速にするために、
DJango で AES 暗号を行う
# ライブラリインストール
$ pip install pycryptodome
$ pip install pycryptodomex# settings.py に キーを記載
“`
$ vim settings.py
“`“`
# AES 暗号
try:
from .aes_key import *
except ImportError:
AES_KEY=’oDZC5a6rhyukFmKCbPS6M45TFROLmrlB’
“`
“`
$ vim aes_key.py
“`
“`
AES_KEY=’dMchLlLllvrDtQUxXDLpAWr2v1EdjuLU’
“`## 確認
“`
$ python manage.py shellfrom project.settings import *
print(AES_KEY)
“`# cipherクラスの作成
“`
import base64
import hashlib
from Crypto import Random
from Crypto.Cipher import AES
mecabの辞書による形態素解析結果の違い
# この記事のついて
– どこでmecabを説明するために作った文章
– 基本はmecabとmecab-ipadic-NEologdの違いを記述
– サルベージしときます.# 形態素解析とは
>形態素解析(morphological analysis)とは、検索エンジンにも用いられている自然言語処理の手法の一つで、ある文章・フレーズを「意味を持つ最小限の単位(=単語)」に分解し、文章やフレーズの内容を判断するために用いられます。
[参考サイト](https://www.seohacks.net/basic/terms/morphological-analysis/)# mecabについて
## 概要
>MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用いている。また、平均的に ChaS
PythonのコンソールをUNKOまみれにする
[「文科省のPythonはPythonじゃねぇ」](https://qiita.com/nagataaaas/items/ba33c4c4e0df0b5aa0c4)を読むまで知らなかったんですが、Pythonは組み込み関数も上書きできちゃうんですね。
で、調べてみると、“`builtins.()“`でもとの組み込み関数も呼び出せると。・・・と、いうことは、プログラムの先頭あたりで
“`
import builtins
def print(str):
builtins.print(‘UNKO’)
“`
といれておくだけで、後は何をprint()しても“`
UNKO
“`って表示される・・・
![2019-11-07_010140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/db344bff-5515-43b4-dfb0-88c62809297c.png)
テロだ・・・・。
PartiQLとMongoDBを接続して遊んでみた
## 前提条件
本記事は、PartiQLについて調べた内容について記載しています。内容に調査漏れ等の不備があるかと思いますので、その場合はEditRequestなりコメントなりでご指摘いただければ幸いです。
またこの記事は2019/11/7時点で書かれたものになります。PartiQLはまだ発表されたばかりで、これから実装がどんどん進み、記載内容がふさわしくなくなることもあると思いますので、その点はご容赦ください##PartiQLとは
[PartiQL](https://partiql.org/)はAmazonがOpenSourceとして公開した、SQL互換言語です。特徴として、制御対象のDB形態を幅広く持てることができ、RDB以外にJSONのようにネスト化されたデータも扱えるようです。
Announcing PartiQL, one query language for your relational and non-relational data:
optunaに数独を解かせてみた
# はじめに
## 動機
何となくの思い付きです。数独を人力以外で解きたかったら、線形計画法やHopfield networkを使えば解けるのはよく知られたことだと思います。
しかし、数独のルールを知らなくても試行回数でごり押しをすれば解けるのではないかと思ったので、実際に試してみました。## 数独とは
パズルゲームの一種です。
詳細はwikipediaを参照してください。[数独](https://ja.wikipedia.org/wiki/%E6%95%B0%E7%8B%AC)## oputunaとは
[optuna](https://optuna.org/)
Preferred Networks社によって開発されたハイパーパラメータを最適化するためのpythonのライブラリです。
ハイパーパラメータの探索アルゴリズムはTPEを利用しており、これはHyperOptと同じです。細かな説明は省略して一言でいうと、最適化の対象がブラックボックスでも、いい感じに目的関数を最適化してくれるということです。
# 方法
前述の通り、optunaを利用します。
そのために正解に近づ
ディープラーニング用に自作PCを作ってUbuntu18.04の環境構築
N番煎じもいいところですが,自作PCの備忘録を残します.
# 作った目的
– [**自動運転での3D Object detection**](http://hktech.hatenablog.com/entry/2018/12/17/232439)のような重いタスクでディープラーニングを試したくなった.
![images.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193401/c0bf70d2-d96e-4f7b-b7da-1892c645e74d.jpeg)
以前のPCはメモリ8GB,GTX1050と貧弱すぎて,自動運転用データセットとして有名な[KITTI](http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d)にあるようなモデルをちょっと動かそうとするとすぐ`Resource exhausted`で落ちてしまいます.
「深層学習 自作pc」などでgoogle検索するとたくさん記事が出てくるので,
動画をリサイズして画像に直すpythonプログラム
探しても見当たらなかったので作りました。
OpenCVで開ける動画ファイルを適当なフレーム毎に間引きながらリサイズして画像ファイルとして保存します。###コード
何も難しいことはしてないので特に説明は不要かと思います。
“`python3:video2jpg.py
import cv2
import os
import argparseparser = argparse.ArgumentParser()
parser.add_argument(“–video_path”, type=str)
parser.add_argument(“–save_dir”, type=str, default=”save/”)
parser.add_argument(“–interval”, type=int, default=10)
parser.add_argument(“–resize”, type=int, default=None, nargs=”+”)
opt = parser.parse_args()def video2jpg():
if not os.p
Python初心者が「Python文法詳解」を読んだメモ #2
# バックナンバー
– [Python初心者が「Python文法詳解」を読んだメモ #1](https://qiita.com/usayomo/items/7024c619c5f72462cb10)# 第3章 式とデータ型
– 論理演算の結果を表す“ bool“ 型も数値型のオブジェクト。
– Pythonのデータはそれぞれ固有の型を持っているが、全て“ object“ 型から派生している。
– どんなオブジェクトであれ“ object“ 型のインスタンスであり、全ての型は、“ type“ という型のオブジェクトである。“`py:オブジェクト属性に関連する組み込み関数
>>> setattr(obj, ‘ham’, 100) # obj.ham = 100 と同じ>>> getattr(obj, ‘ham’, 999) # try:
100 # return obj.ham
# except AttributeError:
Jupyter NotebookをDockerを使って簡単にインストールし起動(Scalaにも対応)
タイトルの通りですが、Jupyter NotebookをDockerを使って簡単にインストールし使用するための作業ログです。Jupyter Notebook上でScalaも使えるようにします。
dockerはインストール済みとします。
以下の`Dockerfile`を準備します。Pythonのパッケージは使用するかもしれないものを書いておきます。
“`docker:Dockerfile
FROM centos:7RUN yum install -y python3 java-11-openjdk
RUN pip3 install jupyter numpy pandas scikit-learn boto3# Jupyter-Scala インストール
WORKDIR /install
ENV SCALA_VERSION=2.13.1
ENV ALMOND_VERSION=0.8.2
RUN curl -Lo coursier https://git.io/coursier-cli
RUN chmod +x coursier
RUN ./coursier bootstra
MacのCatalinaさんでpyenv
# メモ
https://github.com/pyenv/pyenv/wiki
## 依存パッケージのインストール
“`
brew install openssl readline sqlite3 xz zlib
“`## CPPFLAGSを指定してpyenv install
“`
env CPPFLAGS=”-I$(brew –prefix zlib)/include -I$(brew –prefix openssl)/include” pyenv install 3.7.5
“`
pipを使ったmatplotlibのインストールでエラーが出て詰まった話
#要約
pipを使用してmatplotlibをインストールしようとしたところ、インストールに失敗した。
Pythonのバージョンを下げると、正常にインストールが可能となった。#環境
Windows 10 64bit
Python 3.8.0 (→3.7.3 後述)#背景
Python、Pandas、Numpy、matplotlibを使用したプログラムを常用のPC(PC1)で作成しており、正常に動作していた。
別のPC(PC2)で動作させる必要があり、PC2にPythonおよび各ライブラリをインストールしていた。#事象
Python 3.8.0は公式のexeインストーラで正常にインストール完了。
Pandas、Numpyのインストールはpipから正常に完了(Pandasをインストールした時点で、Numpyもインストール)。以下のコマンドでmatplotlibをインストールしようとした際に、エラーが出てインストールに失敗した。
“`
C:\Users\[Username]>pip install matplotlib(中略)
Installing collecte
【中級者への道】Pythonの*args, **kwargsって何?
# はじめに
Pythonのコードをよく見ていると
“`python
def f(*args, **kwargs):
pass
“``*印付きのargs`
そして`**印付きのkwargs`というのを見かけます。これは何なのでしょうか??
# そもそも何の略?
args, kwargsはそれぞれ何の略なのでしょうか?
英語で引数を`argument`といい、複数なら当然argumentsです。
Pythonはかなり省略しがちな記法であり– args = argumentsの略 可変長タプル
– kwargs = keyword argumentsの略 キーワード辞書という意味になっています。
# *args
`*args`は、関数で渡された**余ったキーワード指定なし引数**を、一個のタプルで受け取ることの出来る記法です。
例えば、以下のようにたくさん与えられた整数を足して返す関数accumulateを考えてみます。
“`py
def accumulate(*args):
print(args)
return sum(a
[ゼロから作るDeep Learning]ソフトマックス関数から交差エントロピー誤差までのレイヤ実装
#はじめに
この記事は**ゼロから作るディープラーニング 6章誤差逆伝播法**を自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。#出力層から損失関数までのレイヤ実装
ニューラルネットワークに逆伝播処理を実装するための最後のピースである出力層から損失関数までのレイヤ実装を行いたいと思います。今回は分類に使うソフトマックス関数から交差エントロピー誤差までのレイヤ実装をしたいと思いますが、この部分は回帰に使う二乗和誤差の時もほとんど同じ実装になるのでこれを参考にすればできるかと思います。
“`python
class SoftmaxWithLoss: # ソフトマックス関数+交差エントロピー誤差のレイヤ
def __init__(self):
self.loss = None # 損失関数の値
self.y = None # softmax関数の結果
self.t
[python] スカラーの判定方法
入力引数がスカラーかどうかを簡単に判定したいとき,matlabだと[isscalar](https://jp.mathworks.com/help/matlab/ref/isscalar.html)という関数があるが,pythonの場合,どうするのがよさそうかわからなかったので調べた。
# バージョン情報
こういった話はバージョン依存性があるので,本記事作成時のバージョンを残しておく。– python 3.7.3
– numpy 1.17.0# 方法1: Numberクラスを継承しているかどうかで判定
– [numbers — 数の抽象基底クラス](https://docs.python.org/ja/3/library/numbers.html)を読むと,こんなことが書かれている。
> class numbers.Number
> 数の階層の根。引数 x が、種類は何であれ、数であるということだけチェックしたい場合、isinstance(x, Number) が使えます。コードにすると,こんな感じ。シンプルでよい。
“`py
import number