【Tex】卒論修論には是非ハイパーリンク機能をつけよう
Texの小ネタです。
念のために解説しておくとハイパーリンクとはクリックした時に該当ページとかに飛ぶあれです。
論文の式や図,参照文献へのアクセスを簡単にする為にハイパーリンクをつけるのはとても有用です。
特に長い文章,そう,卒論や修論においてこれはとっても有用なんです。
導入準備
まずは,hyperref.sty と pxjahyper.sty が入っていることを確認してください。
確認方法は,コマンドプロンプトを開いて,
kpsewhich hyperref.sty
と打つとファイルが存在する場合その場所を教えてくれます。
W32texを使っている人ならみな入っていると思われますが,もし入っていなければ以下の記事など参考にして,styファイルをダウンロードして導入してくください。
プリアンブルの記述方法
ポイントは2つあって,hyperref.styの定義場所とpxjahyper.styの詳細設定です。
dvipdfmxの後ろに[hyperref]の記述を追加するのを忘れないように。
\usepackage[dvipdfmx]{hyperref,graphicx} % for hyperref \usepackage{pxjahyper} \hypersetup{ colorlinks=false, % リンクに色をつけない設定 bookmarks=true, % 以下ブックマークに関する設定 bookmarksnumbered=true, pdfborder={0 0 0}, bookmarkstype=toc }
至極簡単なこの動作で,CitationとCaptionへのハイパーリンクを付けられます。
設定の中身については以下のところが実用的にわかりやすく説明してくれてます。
ハイパーリンク付きLaTeX文書
記述方法その2 ー 2017年1月追記 ー
上記のやり方は図の変換を扱うdvipdfmxに書き加える形になるのが気に食わないですね。1つの機能は1つの箇所に記述したいものです。
LyX-2.1.4 から生成する PDF のリンクのバグ対応 - stattotto’s blog
上記のブログを参考にした所,下のように書いても良さそうです。
% for hyperref \usepackage[dvipdfmx, bookmarkstype=toc, colorlinks=false, pdfborder={0 0 0}, bookmarks=true, bookmarksnumbered=true]{hyperref} \usepackage{pxjahyper}
hyperrefは前述のdvipdfmxと別に宣言しても大丈夫でした。また,初期設定を宣言時に行うことができるようですね。
こちらの方が機能を分けられるのでこちらを採用することにしました。(2017年1月現在)
卒論や修論のためのTips:空の章番号へのジャンプ
卒論や修論ではChapter単位でコンパイルをしていくことかと思います。
謝辞などの空の章,すなわち\chapter*{}などで数字のない章を付ける場合,リンクがズレてしまう仕様があるらしいです。
この場合,仮想的なSectionを作成することでこの問題を回避します。
例えば,
\chapter*{謝辞}
と書く代わりに以下のように書きます。
\newpage \phantomsection \addcontentsline{toc}{chapter}{謝辞} \include{Thanks/Thanks}
URLや単語へのハイパーリンク
当然,ハイパーリンクの関係はつけ放題です。
や,結局これも参考文献を見たほうが詳しいですね。
\url{url} :文字列urlにURLを関連付ける(tildeやunderbar文字も処理する)
\href{url}{text} :textをリンク文字列としてパイパーリンクURLを関連付ける
\hypertarget{name}{text} :textにPDFファイル内のリンクポイント名nameを付与する
\hyperlink{name}{text} :textにPDFファイル内のラベル名nameを関連付ける
エラーについて
少なくとも古いclsファイルなどと一緒に使った場合変なエラーが出る事がわかっています。
誰か教えて~~。
Matlab program for dft,fft (離散フーリエ変換)
突然ですがmaltabのreferenceページって結構見づらくないですか?
特にClassとして実装されてる奴らはどういう処理をするのかかなりわかりづらいと私は思っています。
どの操作が必要だったか忘れがちなので記しておきます。アホらしいですが...
DFT用のコード(FFTも同じ)
以下のように関数化しました。パワースペクトル密度の表示まで意外とやることがあるのでこれで結構快適になったと思われます。
11/08 追記:直流成分の除去も中でするようにしました。単に平均を引いてやっています。
function [f power] = DFTandShow(t,x) if size(t) == 1 sampling = t; else sampling = t(2) - t(1); end % transpose so that row become longer if size(x,1) < size(x,2) x = x.'; end sf = 1/sampling % Sample frequency (Hz) L = max(size(x)) % data length(window length) % calc average average = ones(1,L)*x(:,1) / L; x = x - average; % fft N = pow2(nextpow2(L)); % Transform length N = 512; y = fft(x,N); %fft f = (0:N-1)*(sf/N); % Frequency range ( sampling fq / fft length ) power =abs(y/N) *2 ; % Power of the DFT figure; plot(f,power) title('Single-Sided Amplitude Spectrum of X(t)') xlabel('frequency (Hz)') ylabel('Power') grid on; xlim([0 f(floor(N/2))]) % cut off faster frequency than nyquist freq end
MATLAB 画像の相互情報量の計算と比較 (地図と航空写真のマッチング)
随分昔に遊んだコードを掘り出して懐かしくなったのでネットに放流します。
輝度値の二乗誤差(SSD)とはまた違う画像の相互情報量なるものを計算して画像を比較する手法の紹介です。
伝統的に医療用画像なんかのマッチングに使われている感じです。
今現在この手のコードは以下のリポジトリにて管理しています。
EvaluateImage/evaluate_image.m at master · YoshiRi/EvaluateImage · GitHub
Gist版はZNCCのコードに誤りがあります。(あとで直します)
相互情報量とは
ある確率pで起こる事象の情報量Hは次のような式で表されます。
ある事象Aのもつ情報量をH(A),BのをH(B)とすると,それらの間の相互情報量MI(A,B)は次の式で計算されます。
ここで,H(A,B)はAもBも起こる時の情報量です。
画像の相互情報量
では,この話を画像に持ち込むとどうなるかといいますと,
事象:画像の中である画素値が出現する確率 p_I(i)とする。すなわち,0~255の画素値のうちxという画素がどの頻度で出現するかで先程の情報量を定義します。
画像Iの持つ情報量はIの中の全ての画素値の情報量の総和
として表され,これは実際の計算では出現回数を確率として正規化したヒストグラムを用意することになります。
同様にして結合情報は,
画像Iで画素がx,画像I*で画素がyとなる場合の2次元ヒストグラムを用いて同様に情報量を計算します。
注意として,例えば輝度を256階調にするとこのヒストグラムは256*256の結構大きな反復試行を要求されるので計算量が大きくなります。
最終的に画像同士の相互情報量は以下の式で計算されます。
この値が大きいほど,2つの画像の相関が高い,すなわちより似ていると評価できます。
実際の比較:地図画像と航空写真のマッチング
地図画像と航空写真をあわせるのは人間にはなんてことない作業ですが,
画像処理では画素値の相関が殆ど無いのでこれは結構きついです。
相互情報量はそのあたりなんとか出来るらしい[参考文献1]です。試してやんよ。
入力画像
航空写真 map_MI1
GoogleMapの地図画像 map_MI2c
を比較します。
実際のコード
一年以上前に書いたのですごく汚いですが,
ご容赦ください。
コードを組む際のコツ:軽量化
説明の通り,ヒストグラムを作ってカウントアップしていくことで相互情報量を計算できるのですが,
普通の256階調でやると計算になかなか時間がかかります。
従って階調をダウンサンプリングすることでこの問題を回避できます。論文では8階調程度まで落としても平気そうと書いてありますね。
画像間の相互情報量を計算するコード
gradに階調を与えることで,軽量化を図っています。
比較手法のコード
MIの比較用として,SSD,NCC,ZNCCを用いました。
まぁ説明なんかは下のサイトを見てください。教科書にあると思います。
パターンマッチング(正規化相関など) 画像処理ソリューション
Gistに貼っておきました。お好きにどうぞ。
プロット用コード
上で述べた各関数を用いてプロットしています。
コツとしては移動させた時,画面外の領域を参照させないこと。
これをさせると存在しない領域との差を積み上げるため不確かな結果が出ます。
% Read image AI = imread('map_MI1.png'); BI = imread('map_MI2.png'); % BI=imtranslate(AI,[15, -15]); % if colored make it grayscaling if numel(size(AI)) > 2 AI = rgb2gray(AI); end if numel(size(BI)) > 2 BI = rgb2gray(BI); end %% MImap = zeros(101); for i = 1:101 for j = 1:101 Bii = imtranslate(BI,[i - 51, j - 51]); MImap(i,j)=MutualInformation(AI(51:205,51:205),Bii(51:205,51:205),16); end end %% find position [mm,yy]=max(MImap); [mv,mx]=max(mm); my=yy(mx); dx = mx -51; dy = my -51; % maximum value MImap(my,mx) BI_rev= imtranslate(BI,-[dx dy]); figure(3) imshow(imfuse(AI,BI_rev)) title('MI based matching') %% showing % mesh mapping figure(1); mesh(MImap); title('MI function') memory = zeros(101,1); for i = 1:101 memory(i) = i-51; end % linear comparizon figure(2); plot(memory,MImap(51, :)); grid on xlabel('Translation [pix]'); ylabel('Mutual Information') title('256 gradation'); %% SSD ,NCC, ZNCC SSDmap = zeros(101); NCCmap = zeros(101); ZNCCmap = zeros(101); for i = 1:101 for j = 1:101 Bii = imtranslate(BI,[i - 51, j - 51]); SSDmap(i,j)=SSD(AI(51:205,51:205),Bii(51:205,51:205)); NCCmap(i,j)=NCC(AI(51:205,51:205),Bii(51:205,51:205)); ZNCCmap(i,j)=ZNCC(AI(51:205,51:205),Bii(51:205,51:205)); end end %% showing the results figure(4); mesh(SSDmap); title('SSD function') figure(5); mesh(NCCmap); title('NCC function') figure(6); mesh(ZNCCmap); title('ZNCC function')
参考論文
A. Dame, E. Marchand,'Second-Order Optimization of Mutual Information for Real-Time Image Registration'' IEEE TRANSACTIONS ON IMAGE PROCESSING, VOL. 21, NO. 9, SEPTEMBER (2012)
pythonマルチスレッド + ビデオ取得からの顔認識&切り出し
pythonでマルチスレッドが思ったよりも簡単にできるっぽいので試してみました。
手順
以下のサイトに親切な説明が付いています。
Pythonでマルチスレッド処理 - Qiita
- threading.Threadのサブクラスを作る.
- threading.Threadのインスタンスを作る.
ふむふむ。ってどの事だかよくわかりませんね。(ザコ並の感想)
以下自分用メモですが言い直すと
- サブクラスの作成:
class hoge(threading.Thread)とすることでhogeはthreading.Threadを継承したサブクラスになる。ということ。
- threading.Threadのインスタンスを作る:
runで定義される関数を作ることで、hoge.startでその関数を実行できるということ。
動画からの画像読み出し
cap = cv2.VideoCapture(0)
でデフォルトのカメラデバイスをオープンします。0のところをファイル名にしたら動画ファイルも読めるのかな?(憶測)
画像をcapから取得するのは
ret, frame = cap.read()
と書け、frameにイメージが。retに成功したかのflagが保存されます。
正直、以下のように書くことが多いのでほとんど気にしないかとは思いますが。
while(cap.isOpened()):
コード
例のごとく様々なところを参考にしています。
cascade_pathのところは過去記事を参照してください。
# -*- coding:utf-8 -*- #webカメラの映像から顔を探し白の枠線をつけて保存するプログラム import cv2 import threading from datetime import datetime class FaceThread(threading.Thread): def __init__(self, frame): super(FaceThread, self).__init__() self._cascade_path = "haarcascade_frontalface_alt.xml" self._frame = frame def run(self): #グレースケール変換 self._frame_gray = cv2.cvtColor(self._frame, cv2.COLOR_BGR2GRAY) #カスケード分類器の特徴量を取得する self._cascade = cv2.CascadeClassifier(self._cascade_path) #物体認識(顔認識)の実行 -> each rectangle coordinate of face is in _facerect self._facerect = self._cascade.detectMultiScale(self._frame_gray, scaleFactor=1.2, minNeighbors=3, minSize=(10, 10)) if len(self._facerect) > 0: print '顔が検出されました。' self._color = (255, 255, 255) #白 for self._rect in self._facerect: ##検出した顔を囲む矩形の作成 #cv2.rectangle(self._frame, tuple(self._rect[0:2]),tuple(self._rect[0:2] + self._rect[2:4]), self._color, thickness=2) #現在の時間を取得 self._now = datetime.now().strftime('%Y%m%d%H%M%S') self._image_path = 'faces/' + self._now + '.jpg' #切り出し self.x = self._rect[0] self.y = self._rect[1] self.width = self._rect[2] self.height = self._rect[3] self.dst = self._frame[self.y:self.y+self.height, self.x:self.x+self.width] #認識結果の保存 cv2.imwrite(self._image_path, self.dst) # main # カメラをキャプチャ開始 cap = cv2.VideoCapture(0) ret, frame = cap.read() while(cap.isOpened()): ret, frame = cap.read() #frameを表示 cv2.imshow('camera capture', frame) if(threading.activeCount() == 1): th = FaceThread(frame) th.start() #10msecキー入力待ち k = cv2.waitKey(10) #Escキー or'q' を押されたら終了 if k == 27: break if k == ord('q'): break #キャプチャを終了 cap.release() cv2.destroyAllWindows()
結果と反省
結果うまくマルチスレッドを機能させることに成功しました。
すべて一つのコードで書いていた時よりも目に見えて実行速度は向上したと思います。
これで顔領域をたくさん切り取って学習なんかに使えそうですね。
ただ、秒単位でしか名前をつけていないのでいくつかデータを無駄に捨てているのがやや問題でしょうか、
あと、意外と顔以外の領域もキャプチャしてきます。これも学習をするならどける必要がありそうです。
Raspberry Pi3 に OpenCV3をインストール(Raspbian Jessie環境上)&キャリブレーション
前回UbuntuにOpenCV入れて遊んだので今度はRaspberryPiに入れてみます。
前回の記事↓
ossyaritoori.hatenablog.com
正直同じような手順な上,完全に以下のサイトの通りやったので特に言うことはありません。
Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3 - PyImageSearch
以下個人用のメモを残すのみとさせていただきます。
cmake後
手持ちの環境ではPython3にnumpyとOpenCV3が紐付けられた。
OpenCV make 時
非常に熱くなるので適宜冷やしながら行った。途中でフリーズした。
それ以後
現在検証中~~
キャリブレーション
python2系で書いてますけど実際は3の環境でやるので
printまわりは直しておかないと行けないですね。
rmsエラーが自分は0.3程度になりましたがいくつくらいになるといいのかの感覚などはいまだ無いです。
# -*- coding: utf-8 -*- # largely from here # http://russeng.hatenablog.jp/entry/2015/06/16/004704 import numpy import cv2 # get file name efficiently from glob import glob def main(): square_size = 1.0 # 正方形のサイズ pattern_size = (10, 7) # 模様のサイズ pattern_points = numpy.zeros( (numpy.prod(pattern_size), 3), numpy.float32 ) #チェスボード(X,Y,Z)座標の指定 (Z=0) pattern_points[:,:2] = numpy.indices(pattern_size).T.reshape(-1, 2) pattern_points *= square_size obj_points = [] img_points = [] for fn in glob("images/*.jpg"): # 画像の取得 im = cv2.imread(fn, 0) print "loading..." + fn # チェスボードのコーナーを検出 found, corner = cv2.findChessboardCorners(im, pattern_size) # コーナーがあれば if found: term = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1) cv2.cornerSubPix(im, corner, (5,5), (-1,-1), term) # コーナーがない場合のエラー処理 if not found: print 'chessboard not found' continue img_points.append(corner.reshape(-1, 2)) #appendメソッド:リストの最後に因数のオブジェクトを追加 obj_points.append(pattern_points) #corner.reshape(-1, 2) : 検出したコーナーの画像内座標値(x, y) # 内部パラメータを計算 rms,CameraMatrix,Distorition,rotate vec,translate vec rms, K, d, r, t = cv2.calibrateCamera(obj_points,img_points,(im.shape[1],im.shape[0]),None,None) # 計算結果を表示 print "RMS = ", rms print "K = \n", K print "d = ", d.ravel() # 計算結果を保存 numpy.savetxt("rms.csv", numpy.array([rms]), delimiter =',',fmt="%0.14f") numpy.savetxt("K.csv", K, delimiter =',',fmt="%0.14f") numpy.savetxt("Dist.csv", d, delimiter =',',fmt="%0.14f") if __name__ == '__main__': main()
Ubuntu16.04 LTSにOpenCV3.1をインストール から顔認識のテストまで
長らく眠っていたUbuntu使用のレッツノートですが、
最近試したいことが増えたので徐々に出番が増えてきています。
現時点(2017年1月)での最新バージョンであるOpenCV3-1-0を入れて動作確認するまでをメモします.
追記:より良いプログラミング環境のために
個人的に初学者がOpenCVを単体でインストールするのはきちんとした目的がない限りあまりお勧めできません.
Pythonで開発したいのであればAnacondaを使って他のパッケージとまとめてインストールするのが良いです.以下,Windows版の記事ですがUbuntuでもほぼ同じ工程をたどります.
ossyaritoori.hatenablog.com
また,Robot制御に興味関心があるのであればROSを入れることでもOpenCVのパッケージは勝手にダウンロードされます.
ossyaritoori.hatenablog.com
これらとは別にOpenCVを入れる動機としては現状,
といった局所的なものになるかと思います.なお,本記事のサンプルコードはどちらの環境でもきちんと動くはずです.(Python2,3系の修正は必要かも)
環境
Ubuntu 16.04.1 LTS
PC:64bit メモリ:8G
Python 2.7.12
所要時間
所要時間は 10分〜30分前後を見たほうがいいと思います。
ダウンロードとmakeのどちらもそれなりに時間がかかります.
インストールファイルの準備
ほぼすべて、以下のブログの手順通りです、
OpenCV3.1.0のインストールメモ (Ubuntu 14.04 LTS) - umejanのブログ
zipの入手
最初のディレクトリは好きに選んでください。とりあえずDownloadsに入れました。
今思えばhome直下に作ってもよかった。
cd ~/Downloads
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
unzip opencv-3.1.0.zip
requirement のインストール
詳細はよくわかってません、とりあえず言うとおりにしておきましょう。
時々新しいバージョンを求められるので、適宜書き換えて使ってください。
sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
cmakeによる環境の構築
人によってはcmakeのコマンドが入っていないことも多々あるのでまずはターミナルでcmakeと打ってみてください。
ダメなら表示の指示にしたがってコマンドをインストールすることから始めます。
必ず、opencv-3.1.0のディレクトリに移動してから以下のコマンドを順々に実行していってください。
エラーが出る場合はだいたいがパッケージがないからなので、適宜apt-getしてください。
僕の場合はcheckinstallなんかが引っかかりました。
こいつはいろいろ要求してきましたが大体言うとおりにした結果うまく行っています。
責任は取りませんけどね!
mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON .. make -j4 sudo make install sudo checkinstall sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf' sudo ldconfig echo "OpenCV ready to be used"
ldconifgを行ったあとで以下のような画面がでて完了かと思います.
最後に:cv2.soの移動/ Pythonへの認識のさせ方
/usr/local/lib/python2.7/site-packages/
にcv2.soがないらしいので(?)以下の操作をします。
これをするしないでそこまで変化があるかは謎です。確かに上記ディレクトリにはなにも存在しなかったので
一応言うとおりにしています。
sudo cp ~/Downloads/opencv-3.1.0/build/lib/cv2.so /usr/local/lib/python2.7/site-packages/
追記:二度目の環境ではいろいろと変更が加わっていたため違う感じになっていました.
まず,Importを行うとrosのdist-packagesにcv2がないと怒られたので以下のようにしました.
sudo cp ~/opencv-3.1.0/build/lib/cv2.so /opt/ros/kinetic/lib/python2.7/dist-packages/
動作確認
pythonを起動し以下のように打ち込んで結果を得たらとりあえずはインストール終了と言えるでしょう。
>>> import cv2 >>> cv2.__version__ '3.1.0'
OpenCV3系列を入れたのにimportに書くのはcv2のようです.
どういう意味でしょうね?
インストール後のテストコード
画像のOpen
テストコード実行できればもっと安心ですね。
lenaさんの画像は以下からどうぞ
import cv2 img = cv2.imread('lena.jpg') cv2.imshow('img',img) cv2.waitKey(0)
顔認識
もっと進んだテストがしたい方はこちら。
lenaさんの顔を認識して顔の付近を赤く囲むプログラムです。
実に簡単にかけますね、素晴らしい。
#coding: utf-8 import cv2 import numpy as np faceCascade = cv2.CascadeClassifier('~/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml') img = cv2.imread('lena.png', cv2.IMREAD_COLOR) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale(gray, 1.1, 3) # write rectangle in detected face if len(face) > 0: for rect in face: cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=2) else: print "no face" cv2.imshow('detected',img) cv2.waitKey(0) cv2.imwrite('detected.png', img)
トラブルシューティング
error: (-215) !empty() in function detectMultiScale
と出る場合は” faceCascade = cv2.CascadeClassifier('~/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml')”
のpathが間違っているので絶対pathで書き直すか、ファイルそのものを同じディレクトリに持ってきてください。
結果:
初めて自分の環境で書くpythonです(雑魚)
こうしてみると楽ちんでいいですね。python。
実行速度さえなんとかなればな〜。ビデオ版使ってみた感じいうほど遅くないですね。
これが風評被害ってやつか。
Webカメラでリアルタイムに顔認識
Webカメラを繋いで検知するバージョンです。
マルチスレッド化したのも以下の記事に書きました。
ossyaritoori.hatenablog.com
#encode: utf-8 # large part of this source code is from here # http://qiita.com/Algebra_nobu/items/a488fdf8c41277432ff3 import cv2 import os # cascade cascade_file = "/home/yoshiri/Downloads/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt2.xml" #get feature point cascade = cv2.CascadeClassifier(cascade_file) # Capture from camera cap = cv2.VideoCapture(0) color = (255, 255, 255) # white while(True): # get frame from video stream ret, frame = cap.read() #face recognition facerect = cascade.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10)) for rect in facerect: # put rectangle cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2) # show cv2.imshow("Show FLAME Image", frame) # end after 'q' pressed k = cv2.waitKey(1) if k == ord('q'): break cap.release() cv2.destroyAllWindows()
なんかおかしいな?と思ったら
OpenCVあるあるですがここでpathが通っていないと何もできません
サンプルコードを実行するためにはPATHを通しましょう。
困った場合は以下のページなんかがとっても親切です(バージョンこそ違いますが)
Ubuntu 14.04 LTSにOpenCV2.4.11をインストール | ShumiLinux
Path の通し方
ターミナルにて以下のコマンドを打つことで
PATH= $PATH: 追加したいPath export PATH
PATHは:(半角)を使って追加してください。
参考になりそうな書籍
もしPythonを使うのであれば以下の本が基礎からわかってオススメです。
オライリーは原文の方がいいですが和訳版もまぁまぁ実用的ですね。
- 作者: Jan Erik Solem,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/03/23
- メディア: 大型本
- 購入: 1人 クリック: 22回
- この商品を含むブログ (4件) を見る
そんでもってDeepLearningの本も載せておきます。これも同様のPython環境で遊べるので初学者にはもってこいでしょう。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る
以上宣伝コーナーでした。
styファイルを置く場所・置いた後にすること
styファイルがありません^^と言われる。
非常に初心者ぽい記事で恥ずかしいのですが
今ふと,styファイルを置いたら全然読み込んでくれなかったのでメモします。
当方の環境等
- OS:Windows10
- Tex:win32texを使用。 \binにpathが通っている,(後で\shareにも通した。)
- mcode.styを導入しようとした
- clsファイルとかいくつかのstyを入れた記憶があるのだが...