Sử dụng softmax trong tensorflow để train tập dữ liệu của riêng mình

Chào mọi người, em đang tìm hiểu về tensorflow. Thông thường mọi người dùng tập dữ liệu mnist để làm train chữ viết tay. Hiện tại, em muốn train tập dữ liệu hình ảnh của mình, nhưng em không biết định dạng dữ liệu cũng như cấu trúc dữ liệu trong tập mnist như thế nào? Làm thế nào để tạo ra được tập dữ liệu giống như mnist từ dữ liệu ảnh của mình. Em đã tìm trên mạng rất nhiều, nhưng có rất ít bài hưóng dẫn. Đây là link trên stackoverflow, vấn đề của em cũng giống như trong link, đọc trả lời trong link đó, em vẫn ko hiểu cách làm. Mong mọi người giúp đỡ.
Link: http://stackoverflow.com/questions/39947512/load-image-files-in-a-directory-as-dataset-for-training-in-tensorflow

Tập dữ liệu MNIST chắc mọi ngừoi hay lấy ở đây: Yann LeCun’s website

Bạn muốn load file ảnh định dạng gì? Về load file ảnh, bạn có thể xài Scipy để load ảnh, rồi convert nó sang TF.
Vd như này:

from scipy import ndimage

image_file = os.path.join(folder, image)
image_data = (ndimage.imread(image_file).astype(float)

Bạn không cần tạo ra tập dữ liệu như MNIST, bạn có thể lưu vào trong numpy rồi convert sang TF.

Bạn có thể đọc bài này để hiểu kỹ hơn: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/1_notmnist.ipynb

Cảm ơn Tulip đã trả lời. Mình xin nói rõ về cái mình đang làm:
Mình đang làm một project về nhận dạng mặt người. Mình đã thu thập các ảnh về mặt người, mỗi người mình thu thập vài chục ảnh. Mỗi ảnh mình đã đổi thành vector ( mảng 1 chiều), còn label của mỗi ảnh là 1 số( mỗi người mình gán cho họ là 1 số). Tổng hợp lại tất cả các ảnh của những người đó, mình có 1 ma trận. Mỗi dòng của ma trận là 1 ảnh và ma trận có số cột là số pixel của ảnh (128x128)+1 cột của label và số dòng là số lượng ảnh.
Tới đây mình không biết train như thế nào với tập dữ liệu này.
Mình đã đọc link bạn gửi. Nhưng vẫn chưa hiểu rõ cách làm. Bạn đã làm hay có kinh nghiệm về mảng này thì chỉ mình với. Cảm ơn bạn trước.

Bạn có thể nói rõ hơn bạn đang làm để tìm hiểu thuật toán / demo hay là một phần của ứng dụng nào đó được không? Vì mỗi mục đích sẽ có cách làm khác nhau. Tensor flow chỉ là 1 thư viện, việc chỉ học cách sử dụng thư viện sẽ không giúp ích nhiều lắm :stuck_out_tongue:.

Như đã nói ở trên, mình đang làm project nhận dạng mặt người dùng deep learning để training. Nên mình bắt đầu tìm hiểu và làm từ mạng neuron đơn giản nhất là 1 layer. Mình đã thu thập ảnh mặt người để làm tập dữ liệu, mình dùng tensorflow và softmax để train tập dữ liệu đó. Mình đã chuyển tập dữ liệu ảnh đó thành ma trận như nói ở trên. Nhưng không biết train như thế nào?

Nếu bạn muốn học về nhận dạng mặt người, bạn nên bắt đầu từ OpenCV để biết về các kỹ thuật xử lý ảnh. Sau đó mới tìm hiểu đến máy học và không nên sử dụng Tensor flow bây giờ, vì nó khá là High Level, nó che hết xử lý ở dưới và bạn chỉ nên sử dụng nó khi đã hiểu rõ máy học là gì. Bây giờ bạn định sử dụng nó với mạng 1 lớp dùng softmax thì nó sẽ sai tè le, do bạn chưa hiểu khi nào cần dùng cái gì. Bài toán MNIST so với nhận dạng khuôn mặt có độ phức tạp rất khác nhau.

Còn nếu bạn muốn làm demo hoặc muốn có kết quả tốt, nhanh ngay từ đầu thì nên kiếm thư viện :stuck_out_tongue: . Có rất nhiều người đã viết khá tốt rồi, như cái này của CMU chẳng hạn :stuck_out_tongue: https://cmusatyalab.github.io/openface/

1 Like

@Itachi_Citus nói đúng đó. Mình không rõ bạn am hiểu machine learning nói chung và Deep learning tới mức độ nào, nên cũng khó nói. Tuy nhiên, bạn bảo chưa hiểu rõ link mình gửi thì mình đoán chắc bạn cũng chưa quen với DL lắm.

Nhân đây thì tuỳ định hướng của bạn, nếu bạn chỉ cần hoàn thành prj thôi , mà không có thời gian / không muốn tìm hiểu DL, thì bạn có thể xài cách trung gian, vd như link của Itachi, hoặc xài MS API (giống ứng dụng gọi tên JAV idol), nói chung xài API mình nghĩ cũng đơn giản hơn.

Còn nếu muốn build từ TF thì cũng hơi mất thời gian đó, nếu bạn vẫn muốn thì có thể nói thêm, hehe

Mình chưa học hay làm về máy học bao giờ cả. Khi nhận được project này, mình mới bắt đầu vừa tìm hiểu vừa làm. Yêu cầu project là: Viết ứng dụng điểm danh bằng mặt người sử dụng máy học deep learning và đặc trưng haar-like cascade boosted.
Do mình chưa làm lần nào nên mình làm theo từng bước của giáo viên giao. Làm tới yêu cầu nào thì mình vừa tìm hiểu, vừa làm. Nên gặp rất nhiều khó khăn. Mình đã làm xong phần phát hiện mặt người dựa trên đặc trưng của haar-like và chụp được mặt người, lưu lại làm dữ liệu để train (sử dụng opencv). Hiện tại, mình đang làm bước train dữ liệu, yêu cầu của giáo viên ở bước này là sử dụng tensorflow và softmax để train từ tập ảnh đã thu được để ra được xác suất nhận diện mặt người (nhưng chỉ cần dùng mạng 1 lớp), giống như kết quả sau khi train tập dữ liệu MNIST.
Tuy là để hoàn thành project, nhưng mình cũng muốn tìm hiểu để giúp ích cho công việc sau này. Mong các bạn giúp đỡ :smiley:

nếu đã vậy thì bạn xem qua khoá này đi, học 2 phần đầu là làm tốt cái bạn cần. 2 phần đầu cũng tương đối dễ và nhanh
https://classroom.udacity.com/courses/ud730/

Bài toán ngày thuộc về bài toán phận lớp (Classification) trong Machine Learning và bài toán của bạn là bài toán phân lớp hình ảnh (Image Classification).

Với dataset của bạn là một tập các hình ảnh với mổi ảnh có size là 128*128 pixel.
Thông thường trong các bài toán này chúng ta sẽ biểu diễn một điểm dữ liệu (bài toán này là một hình ảnh) dưới một vector n chiều (dimension). Ví dụ bài toán của bạn là 128 *128 chiều.

Như đa số trong các bài toán về hình ảnh người ta đều có bước rút trích đặc trưng (feature extraction) của hình ảnh để đưa về một vector đặc trưng sau đó mới đưa những vector đặc trưng này vào bộ phận lớp (classifier). Thông thương trong xử lý người ta rút trích các đặc trưng như đặc trưng cạch, đặc trưng về màu, và mình thấy sử dụng phổ biến nhất là đặt trưng SIFT.

Dataset của bạn đã có gán nhãn nên bạn sử dụng các thuộc toán máy học có giám sát (supervised learning) để phân lớp. Một số thuật toán phân lớp như DecisionTree, KNN (K-Nearest Neighbor), SVM (Support Vector Machine), ANN (Neraul Network). Hiện nay thì deep learning cho kết quả cao trong các bài toán phân lớp.

Bạn xem qua bài toán phân lớp trong Machine Learning để hiểu rõ hơn bài toán của mình.
http://eitguide.com/bai-toan-phan-lop-trong-machine-learning-classification-machine-learning/

Cảm ơn Tulip, trong quá trình làm nếu có gì chưa rõ, mình sẽ hỏi thêm. Cảm ơn bạn rất nhiều

Bài toán của mình không dùng đặc trưng SIFT mà dùng đặc trưng Haar-like. Mình đang không biết làm thế nào để tạo ra train, test dataset từ những ảnh mình đã thu thập được để train và kiểm tra.

Haar-like chỉ là bước tiền xử lý để bạn detect khuôn mặt từ một bức hình thôi.
Còn đặc trưng sift là đặc trưng rút trích từ hình ảnh bạn sử dụng như là data train

Bài toán của mình, theo yêu cầu của giáo viên thì không có dùng SIFT, chỉ dùng haar-like để detect khuôn mặt, Adaboosted Cascade classify để rút trích đặc trưng. Rồi dùng deep learning để train.

Minh nghỉ bạn nên đọc lại các bài cơ bản về Machine Learning trước khi bắt tay vào làm.

Minh cũng đang tìm hiểu về tensorflow, không biết bạn đã train được dữ liệu chưa, nếu được bạn có thể hướng dẫn mình cách train ko ?

Mình gửi bạn link này để xem tham khảo. Trong đó có những ví dụ, code và chú thích. Bạn có thể đọc để nắm đươc cách train. :slight_smile:

Mọi người vào trang này

Trong đó có các source code ví dụ. Hy vọng sẽ giúp ích.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?