Bài đăng

Stack-Biểu thức đúng

package ArrayProcessing; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class MyStack { private int maxSize;    private char[] stackArray;    private int top;    public MyStack(int s) {       maxSize = s;       stackArray = new char[maxSize];       top = -1;    }    public void push(char j) {       stackArray[++top] = j;    }    public char pop() {       return stackArray[top--];    }      public boolean isEmpty() {       return (top == -1);    }    static int check(String s) {    MyStack myStack = new MyStack(10);    int kt = 0;      for(int i=0; i<s.length(); i++) {     if(s.charAt(i)=='{' || s.charAt(i)=='[' || s.charAt(i)...

Bản note kiến thức-Natural Language Processing( Các khái niệm cơ bản)

Hình ảnh
Các khái niệm cơ bản mình thấy thú vị trong quá trình làm NLP: 1. Tokenizer:         - Tách ra words hoặc sentences. 2. Stemming:        -Biến đổi các từ về dạng nguyên gốc bằng cách bỏ những kí tự cuối        VD: walks -> walk, goes->goe tuy nhiên đây cũng chính là nhược điểm của stemming vì gốc goes là go chứ đâu phải goe 3. Lemmatization:       - Thông minh hơn Stemming vì dựa trên bộ từ điển       VD:goes, went->go

Nhận dạng chữ cái viết tay

Chào các bạn , blog hôm nay là màn mở đầu cho một năm 2019 của mình. Chẳng là những ngày cuối 2018 hứng khởi xem mấy bài trên Viblo của bạn cùng lớp thấy hay quá nên thử làm luôn. Đó là bài Chấm thi tự động bằng Opencv và Deep Learning, các bạn có thể xem tại ĐÂY . Blog này mình muốn đề cập đến phần tạo model bằng CNN để nhận diện các đáp án( A, B, C, D). Nếu các bạn muốn phạm vi nhận diện lớn hơn, đừng lo lắng vì việc tạo model vẫn tương tự như vậy thôi.😁 Nếu bạn nào đã ghé thăm blog "Mnist Digit" của mình thì thấy nó hoàn toàn giống nhau nhé 😀 Về dataset thì mình lấy bộ A-Z handwritten của Kaggle khá là lớn.  Dataset 26 class mỗi dòng đại diện cho một hình ảnh chữ cái size 28x28, trong đó Col đầu tiên là nhãn cho sample, tiếp tục 784 col sau là giá trị pixel của hình ảnh đã được trải phẳng( flatten) 56080 dòng đầu tiên là dữ liệu cho 4 class A, B, C, D Source code: mình để epoch = 6 chạy cho nhanh và kết quả khá ổn(99,87%)  nên cũng chưa thử tăng epoch lên ...

1000 queens using Java under 30s

import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class NQEEN {     static final int N=1000;     static Random rand = new Random();         // i=col, get(i) = row     //h - so cap doi gay nguy hien cho nhau     //cung dong: get(i) = get(j)     //duong cheo song song duong cheo chinh: get(i)-i = get(j)-j     //song song duong cheo phu: get(i)+i = get(j)+j     static int get_h_cost(ArrayList <Integer>board){         int h = 0;         for(int i=0; i<board.size(); i++){             for(int j=i+1; j<board.size(); j++){                 if((board.get(i) - i == board.get(j) - j) || (board.get(i) + i == board.get(j) + j))                     h ++;         ...

Bàn về layers trong ANN

Hôm nay chúng ta sẽ bàn về layers: Init ANN classifier = Sequential() First hidden layer classifier.add(Dense( output_dim = 6 , init = 'uniform' , activation = 'relu' , input_dim = 11 )) Second hidden layer classifier.add(Dense( output_dim = 6 , init = 'uniform' , activation = 'signmoid' )) Output layer classifier.add(Dense( output_dim = 1 , init = 'uniform' , activation = 'softmax' )) Vấn đề 1: Có lẽ nhiều bạn đã thắc mắc làm sao để chọn được output_dim=? là hợp lý? Đây là một câu hỏi lớn haha.  Yep, It's art not science! Việc lựa chọn output_dim tốt nhất có lẽ là dựa vào kinh nghiệm việc tùy chỉnh các tham số sao cho có kết quả tốt nhất( param tuning) Có một mẹo mà mình học được từ series về ANN của Machine Learning A-Z: Nói trước là chỉ là mẹo và nó không phải ART mình nói ở trên đâu. Nó tốt hơn khi các bạn không biết nên chọn output_dim bằng bao nhiêu chứ không phải tốt nhất cho...

Ứng dụng CNN phân loại Iris dataset

Hình ảnh
Xử lý dữ liệu: import numpy as np import pandas as pd from keras.utils import to_categorical #Import dataset dataset = pd.read_csv( 'dataset.csv' ) X = dataset.iloc[: , :- 1 ].values y = dataset.iloc[: , - 1 ].values #Endcoding categorial data from sklearn.preprocessing import LabelEncoder , OneHotEncoder labelendcoder_X_lastcol = LabelEncoder() y = labelendcoder_X_lastcol.fit_transform(y) y = pd.get_dummies(y).values #split dataset to train and test from sklearn.model_selection import train_test_split X_train , X_test , y_train , y_test = train_test_split(X , y , test_size = 0.2 , random_state = 0 ) #feature scaling from sklearn.preprocessing import StandardScaler sc =StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.fit_transform(X_test) Build CNN: # Part 2-make cnn from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam classifier = Sequential() classifier.add(Dense( 10 , input_shape =( 4 , ) , activati...

Convolutional Neural Network - CNN

Hình ảnh
Cùng xây dựng model để giải quyết bài toán phân biệt dog or cat nào! Cấu trúc dataset: Bộ dữ liệu gồm có 10000 ảnh: 8000 ảnh train( 4000 mỗi loại dog, cat) và 2000 ảnh test( 1000 mỗi loại) Phần 1: Xây dựng mô hình: Trước tiên cài đặt các thư viện cần thiết như Keras, Tensorflow , nếu các bạn đã install thì skip nhé :) # Importing the Keras libraries and packages from keras.models import Sequential from keras.layers import Convolution2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense It's time to start now! * Lưu ý: vì trong bài chỉ có 2 class nên dùng binary_crossentropy , nếu nhiều class thì thay bằng  categorical_crossentropy . pool để giảm sample trong input Phần 2: Fit model     * Tương tự như chú ý ở phần 1: class_mode có thể tùy chỉnh theo từng bài toán mà có thể đặt là binary hay categorial Phần 3: Đoán thử ảnh from keras.preprocessing import image test...