ためすう

Pytorch のエラー 'invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number' を解消する

2019-09-24

やったこと

“invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number” というエラーが発生したので、調査します。

確認環境

Google Colaboratory で試しました。

import torch
print(torch.__version__)

1.1.0

調査

問題となったコード <class 'torch.Tensor'> は0インデックスが使えないようです。

修正前

total_loss += loss.data[0]

修正後

total_loss += loss.data.item()

参考

OpenCV を使って、顔検出してみる

2019-09-23

やったこと

OpenCV を使って、顔検出してみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.2'

調査

すでに学習済みの分類器を使います。 haarcascade_frontalface_alt.xml

import cv2
import sys
import os
import shutil

cascade_path = "./haarcascade_frontalface_alt.xml"

image_path=('/Users/himejima/Desktop/working/satomi-2/1451685134.jpg')
image = cv2.imread(image_path)
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
## print("face rectangle")
## print(facerect)

if len(facerect) > 0:
  path = os.path.splitext(image_path)

for rect in facerect:
  # 顔だけ切り出して保存
  x = rect[0]
  y = rect[1]
  width = rect[2]
  height = rect[3]
  dst = image[y:y+height, x:x+width]
  new_image_path = './' + str(0) + path[1];
  # print(new_image_path)
  cv2.imwrite(new_image_path, dst)

参考

Python の shutil モジュールを使ってみる

2019-09-17

やったこと

shutil モジュールを使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

shutil モジュールはファイルやファイルの集まりに対する高水準の操作方法を多数提供します。

hoge ディレクトリがあるとします。

>>> import shutil
>>> shutil.rmtree('hoge')
>>> exit()

参考

Google Colaboratory で Google Drive にアクセスする

2019-09-17

やったこと

Google Colaboratory で Google Drive にアクセスしてファイルを読み込んでみます。

調査

# -*- coding: utf-8 -*-

# PyDrive のインストール
!pip install -U -q PyDrive

# ライブラリの読み込み
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

# GoogleCloudSDK の認証
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

# 共有リンクで取得したもの
id = 'hogehoge'
downloaded = drive.CreateFile({'id': id})
downloaded.GetContentFile('./0.jpg')
ls
0.jpg   sample_data/

参考

numpy.savez を使ってみる

2019-09-16

やったこと

numpy.savez を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

>>> a = np.arange(1, 10)
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.savez('hoge.npz', x=a)
>>> f = np.load('./hoge.npz')
>>> f['x']
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

ファイルを作成して、内容を読み込むこともできました。

参考

os.listdir を使ってみる

2019-09-16

やったこと

os.listdir を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

準備

$ tree
.
├── aaa.txt
├── bbb.txt
├── ccc.txt
└── test.py

test.py

import os
i = os.listdir('./')
for target_file in i:
    print(target_file)

実行

出力結果

$ python test.py
ccc.txt
bbb.txt
test.py
aaa.txt

numpy.random.normal を使ってみる

2019-09-16

やったこと

numpy.random.normal を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

Draw random samples from a normal (Gaussian) distribution

上記によれば、ガウス分布でランダムな値が作られます。

任意の平均、標準偏差で生成することができます。

>>> np.random.normal(0, 1, (2, 3))
array([[ 0.37994701, -0.65873701, -0.60940363],
       [-0.14211842, -1.40152253, -0.48017185]])
>>> np.random.normal(0, 1, (2, 3))
array([[ 0.80400563,  0.19123044, -0.75771854],
       [ 1.07727344,  0.45275647, -2.22720158]])
>>> np.random.normal(0, 1, (2, 3))
array([[ 0.19913532,  0.70579006, -0.24233281],
       [-0.42913376, -0.04703086,  0.62174294]])
>>> np.random.normal(0, 1, (2, 3))
array([[-0.92828659, -0.37335564,  0.41829356],
       [ 0.99799035, -1.75828243,  1.1866021 ]])

参考

OpenCV で画像をリサイズする

2019-09-15

やったこと

OpenCV ライブラリを使い、画像をリサイズしてみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

opencv-img-resize.py

import cv2

print(cv2.__version__)

img = cv2.imread('sample.jpg')
width, height = 600, 400
img = cv2.resize(img, (width, height))
cv2.imwrite('sample-resize2.jpg', img)

出力結果

$ python opencv-img-resize.py
3.4.2

参考

OpenCV で画像を読み込んでみる

2019-09-13

やったこと

OpenCV ライブラリを使い、画像を読み込んで表示してみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

opencv-img.py

import cv2

print(cv2.__version__)
img = cv2.imread('sample.jpg')
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv-img2.py

import cv2
from matplotlib import pyplot as plt

print(cv2.__version__)
img = cv2.imread('sample.jpg')
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(rgb)
plt.show()

参考

PIL で画像をリサイズする

2019-09-11

やったこと

PIL ライブラリを使い、画像をリサイズしてみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

調査

バージョン確認

$ conda list Pillow
# packages in environment at /anaconda3:
#
pillow                    6.1.0            py36hb68e598_0

pil-image-resize.py

from PIL import Image
img = Image.open('./sample.jpg')
width, height = 500, 600
img = img.resize((width,height))
img.save('./sample_resize.jpg')

参考