2016-01-20 11 views
7

Tôi đang cố gắng triển khai các mạng thần kinh trong tia lửa và scala nhưng không thể thực hiện bất kỳ phép nhân vectơ hoặc ma trận nào. Spark cung cấp hai vectơ. Spark.util hỗ trợ vector dot hoạt động nhưng nó không được chấp nhận. Các vectơ mllib.linalg không hỗ trợ các hoạt động trong scala.Sự khác biệt giữa các vector vonfram mllib.linalg của Apache và vectơ spark.util cho việc học máy

Loại nào để sử dụng để lưu trữ trọng lượng và dữ liệu đào tạo?

Cách thực hiện phép nhân vectơ trong tia lửa với mllib như w * x trong đó w là vectơ hoặc ma trận có trọng số và x là đầu vào. pyspark vector hỗ trợ dot sản phẩm nhưng trong scala Tôi không thể tìm thấy chức năng như vậy trong vectơ

Trả lời

6

Vâng, nếu bạn cần hỗ trợ đầy đủ cho các toán tử đại số tuyến tính, bạn phải tự mình thực hiện hoặc sử dụng thư viện bên ngoài. Trong trường hợp thứ hai, lựa chọn hiển nhiên là Breeze.

Nó đã được sử dụng đằng sau hậu trường nên không giới thiệu phụ thuộc bổ sung và bạn có thể dễ dàng sửa đổi mã Spark hiện có cho chuyển đổi:

import breeze.linalg.{DenseVector => BDV, SparseVector => BSV, Vector => BV} 

def toBreeze(v: Vector): BV[Double] = v match { 
    case DenseVector(values) => new BDV[Double](values) 
    case SparseVector(size, indices, values) => { 
    new BSV[Double](indices, values, size) 
    } 
} 

def toSpark(v: BV[Double]) = v match { 
    case v: BDV[Double] => new DenseVector(v.toArray) 
    case v: BSV[Double] => new SparseVector(v.length, v.index, v.data) 
} 

Mahout cung cấp thú Spark and Scala bindings bạn có thể tìm thấy thú vị là tốt.

Đối với phép nhân vectơ ma trận đơn giản, có thể dễ dàng hơn để tận dụng các phương pháp ma trận hiện có. Ví dụ: IndexedRowMatrixRowMatrix cung cấp các phương thức multiply có thể lấy ma trận cục bộ. Bạn có thể kiểm tra Matrix Multiplication in Apache Spark để biết cách sử dụng mẫu.

Các vấn đề liên quan