2020年4月30日 星期四

解決TypeError: type of argument "epsilon" must be int; got float instead的錯誤

日前在使用tensorflow_addons時遇到以下錯誤:
TypeError: type of argument "epsilon" must be int; got float instead

這時進入tensorflow_addons/layers/normalizations.py裡面

找到epsilon int = le-3的地方

把int改成[int,float]

再執行一次程式,問題就解決了

2020年4月26日 星期日

程式語言毛病數量排行

本文依據Stack Overflow的文章數量,衡量前十大最容易出毛病的程式語言排名。

第十名:C++
C++在Stack Overflow有10,400,000則文章

第九名:SQL
SQLStack Overflow19,800,000則文章

第八名:C#
C#Stack Overflow28,900,000則文章

第七名:PHP
PHPStack Overflow31,400,000則文章

第六名:R
RStack Overflow33,500,000則文章

第五名:C
CStack Overflow35,200,000則文章

第三名:GO與Python並列
GO與PythonStack Overflow皆36,900,000則文章

第二名:JavaScript
JavaScriptStack Overflow37,000,000則文章

第一名:Java
JavaStack Overflow39,300,000則文章


當然,本文只是玩笑性質,不必當作真正選擇語言的參考。

2020年4月5日 星期日

[小技巧]0.1+0.2==0.3的快速解法

最近在製作程式考題,出了一個0.1+0.2==0.3的題目。
這是很常見的程式考題,
題目可能會問如何回傳正確的數字,當0.1+0.2後,結果會是0.30000000000000004的數字,所以0.1+0.2==0.3會回傳false。

怎麼快速解這題呢,只要把它變成整數就可以了。
範例:
let a=0.1,b=0.2;
answer=(a*10+b*10)/10;

程式的意思是,先將0.1和0.2轉成1和2,相加後會變成3,之後再除上之前乘上的數字變0.3,就能回傳正確的數字。

同理:
0.24+0.42會回傳0.6599999999999999。
故只要將10改成100:
let a=0.24,b=0.42;
answer=(a*100+b*100)/100;

就能回傳正確的數字:0.66

2020年4月2日 星期四

在Linux解壓縮已切分成數份的zip檔

已知在Linux系統下unzip指令可以解壓縮zip檔,但是,如果壓縮檔已經被分割成數份zip檔了該怎麼辦呢。


首先,開啟CLI介面,輸入:
cat face2.zip* > face2.zip

註:face2為zip檔的檔名,請自行改成自己的。

然後這群zip檔就被合併成一個zip檔了。

然後再輸入解壓縮指令:
unzip face2.zip



該zip檔案就可以解壓縮了。

=====分隔線=====

如果覺得這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。

您的支持是我寫文的最大動力。

如果依然失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。


希望這篇文有幫助到各位ξ( ✿>◡❛)

2020年3月29日 星期日

[解決方法]引入cv2時發生ImportError: libSM.so.6: cannot open shared object file: No such file or directory錯誤

使用Docker並在Python程式import cv2時可能會傳回
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
的錯誤。

這是因為dockerfile的基本映像檔已經過期了

解決方法:
首先,開啟CLI介面,更新apt-get,輸入:
sudo apt-get update

然後,安裝libsm6,libxext6,libxrender-dev這三個元件,輸入:
sudo apt-get install -y libsm6 libxext6 libxrender-dev


更新完後,再重新import一次cv2,問題得以解決


=====分隔線=====
如果覺得這篇文有幫助到你們的話,請留言或幫忙按個廣告吧。

您的支持是我寫文的最大動力。

如果依然失敗了,也請留言讓我知道,看看哪個環節出了問題,我有看到就會回。


希望這篇文有幫助到各位ξ( ✿>◡❛)

2020年3月6日 星期五

[不專業評比]各主流程式語言效能比較

本篇將依據各主流程式語言執行的時間來比較效能差異

程式語言的速度僅供參考,效能往往取決於譯器而非語言本身


系統環境:

  • 作業系統:Windows10,64位元
  • CPU:intel i7 9700
執行環境:
  • Java:cmd
  • JavaScript:Chrome
  • C++:Visual Studio 2019
  • C#:Visual Studio 2019
  • Python:Spider
================
比較:各語言的IO效能

程式碼:
JAVA
  • for (var i=0;i<10000;i++)System.out.print(1);  
JavaScript
  • for (var i=0;i<10000;i++)console.log(1);
C++
  • for(int i=0;i<10000;i++) std::cout << 1;
C#
  • for (int i = 0; i < 10000; i++) Console.Write(1);
Python
  • for i in range(10000):
  •     print(1)

執行時間(單位:毫秒)

Java130
JavaScript73
C++176
C++(最佳化)129
C#136
C#(最佳化)132
Python142

=================
比較:各語言的一維陣列/串列填充效能

程式碼
JAVA
  • for (var i=0;i<1000000;i++)arr[i]=i; 
JavaScript
  • for (var i=0;i<1000000;i++)arr[i]=i;
C++
  • for (int i = 0; i < 1000000; i++)
  • number[i]=i;
C#
  • for (int i = 0; i < 1000000; i++) number[i]=i;
Python
  • for i in range(1000000):
  •     list0[i]=i


執行時間(單位:毫秒)

Java2
JavaScript6
C++2
C++(最佳化)2
C#4
C#(最佳化)2
Python98

=============================
比較:各語言的串列新增效能

程式碼
JAVA
  • for (int i = 0; i < 1000000; i++) st.push(i); 
JavaScript
  •  for (var i=0;i<10000000;i++)list.push(i);
C++
  • for (int i = 0; i < 1000000; i++)
  • mystack.push(i);
C#
  • for (int i = 0; i < 1000000; i++) myStack.Push(i); 
Python
  • for i in range(1000000):
  •     list0.append(i)

執行時間(單位:毫秒)

Java20
JavaScript135
C++690
C++(最佳化)12
C#59
C#(最佳化)59
Python94

========================
比較:各語言的遞迴效能(使用費氏數列)

程式碼
JAVA
  • public static long fib(int n){
  •         if(n==1)
  • return 1;
  • else if (n==2)
  • return 1;
  • else
  • return fib(n-1)+fib(n-2); 
  •     }   
  • fib(40);
JavaScript
  • function fib(n){
  •       if (n == 1)
  •         return 1;
  •       else if (n == 2)
  •         return 1;
  •       else
  •         return fib(n - 1) + fib(n - 2);
  •     }
  • fib(40);
C++
  • static long fib(int n) {
  • if (n == 1)
  • return 1;
  • else if (n == 2)
  • return 1;
  • else
  • return fib(n - 1) + fib(n - 2);
  • }
  • std::cout<<fib(40);
C#
  • static long fib(int n)
  •         {
  •             if (n == 1)
  •                 return 1;
  •             else if (n == 2)
  •                 return 1;
  •             else
  •                 return fib(n - 1) + fib(n - 2);
  •         }
  • fib(40);
Python
  • def fib(n):
  •     if n == 1:
  •         return 1
  •     elif n == 2:
  •         return 1
  •     else:
  •         return fib(n - 1) + fib(n - 2); 
  • fib(40)

執行時間(單位:毫秒)

Java224
JavaScript632
C++2527
C++(最佳化)251
C#2035
C#(最佳化)343
Python17947

================
比較:各語言大型二維陣列效能

程式碼(灰色字不列入計時):
JAVA

  • int arr[][]; 
  •  arr = new int[10000][10000]; 
  • for(int i = 0; i < arr.length; i++)  
  •             for(int j = 0; j < arr[i].length; j++) 
  •                 arr[i][j] = 0; 
  • for(int i = 0; i < arr.length; i++)  
  •             for(int j = 0; j < arr[i].length; j++) 
  •                 arr[i][j] = 255-arr[i][j]; 
JavaScript
  • var tArray = new Array();
  •     for (var k = 0; k < 10000; k++) {
  •       tArray[k] = new Array();
  •       for (var j = 0; j < 10000; j++) {
  •         tArray[k][j] = 0;
  •       }
  •     }
  •     var y=0,x=0;
  •  for (y = 0; y < 10000; y++) {
  •       for (x = 0; x < 10000; x++) {
  •         tArray[y][x] = 255 - tArray[y][x];
  •       }
  •     }
C++
  • unsigned char** fp = new unsigned char* [10000];
  • int x = 0, y = 0;
  • for (int j = 0; j < 10000; j++)
  • fp[j] = new unsigned char [10000];
  • for (y = 0; y < 10000; y++)
  • {
  • for (x = 0; x < 10000; x ++)
  • {
  • fp[y][x] = 255 - fp[y][x];
  • }
  • }

C#
  • int[,] number = new int[10000, 10000];
  •             int y = 0, x = 0;
  •             for (y = 0; y < 10000; y++) for (x = 0; x < 10000; x++) number[y,x] = 0;
  • for (y = 0; y < 10000; y++)
  • {
  • for (x = 0; x < 10000; x++)
  • {
  •  number[y,x] = 255 - number[y,x];
  • }
  •  }
Python
  • score=[[0]*10000 for i in range(10000)]
  • for i in range(10000):
  •     for j in range(10000):
  •         score[i][j]=0
  • for i in range(10000):
  •     for j in range(10000):
  •         score[i][j]=255-score[i][j]

執行時間(單位:毫秒)

Java52
JavaScript194
C++185
C++(最佳化)45
C#437
C#(最佳化)171
Python13908

=======================
整體上來說,在各個方面每個語言各有優劣

但依我個人排序的順序比為:
  1. C++(最佳化)
  2. Java
  3. C#(最佳化)
  4. JavaScript
  5. Python
不過就如開頭紅字所說,程式語言不應用來直接比較速度,如果想要更優的效能,編寫出更好的演算法帶來的速度效益往往超過更換語言的速度效益

對此篇有興趣的歡迎指教,希望以後可以出更多IT相關文章

2020年2月29日 星期六

2020年2月25日 星期二

[密技]如何在小畫家中使用漸層筆刷

繼上次這篇 [密技]如何在小畫家中使用自訂筆刷
已經可以得知小畫家可以自訂筆刷
那能不能用相同原理讓小畫家也有漸層筆刷呢,可以的

在這個範例中,將會實作一隻漸層蛇

首先,畫一個對角線,左上紅右下藍

2020年2月24日 星期一

2020年2月17日 星期一

[好東西推薦]線上圖片線稿抽取程式

google搜尋線稿抽取的教學,幾乎都需要CSP或PS等高檔軟體才能辦到,還需要一堆步驟,那有沒有線上版並且一個按鍵搞定的呢?有的

這是小弟我花了兩天兩夜的時間完成的線稿抽取程式網頁版
https://linedraft.blogspot.com

感謝您的支持,未來我將會優化它做更好的效果

2020年2月13日 星期四

[小知識]電腦今天突然跑不順怎麼辦

標題:電腦今天突然跑不順怎麼辦

通常電腦暫時性的當機或變緩慢時,重開機可以解決90%以上的問題。

2020年2月10日 星期一

[密技]解決keras的loss卡在0.69不下降的問題

剛剛使用Keras卷積神經網路訓練模型時,遇到一個可怕的狀況:
無論參數怎麼調,loss始終卡在0.69,即使一開始不為0.69,過了幾個epoch後loss依然會回到0.69

解決方法:

2020年2月6日 星期四

[小技巧]在tensorflow2.0中沿用舊版的keras_contrib

最近在研究keras的cycleGan,將keras轉成tf.keras的版本時發生一個問題:
No module named 'keras_contrib'
看來似乎keras_contrib不存在於tensorflow2.0

取而代之的是tensorflow_addons
下pip指令:pip install tensorflow-addons

然後回到我上面的程式,將
from keras_contrib.layers.normalization.instancenormalization import InstanceNormalization
改成
from tensorflow_addons.layers import InstanceNormalization

就可以正常使用了

2020年1月29日 星期三

[密技]兩個解決CSS transform在chrome破圖+閃爍的方法

在chrome中使用CSS transform旋轉影像時可能會出現破圖+畫面閃爍的問題(在firefox則不會)

這可能是因為他沒有真正發揮到硬體(GPU)加速

這時有兩個解決方式

2019年12月7日 星期六

[小技巧]如何在VirtualBox的內外拖放大量檔案

最近想要跑深度學習,需要傳送大量圖片到虛擬機的Linux中

可是VirtualBox卻無法一次拖動89825張圖片