mirror of
https://github.com/marian-nmt/marian.git
synced 2024-09-17 09:47:34 +03:00
Merge ../Marian.hieu
This commit is contained in:
commit
063dd8649e
@ -10,7 +10,7 @@ Expr::Expr(Chainable<Tensor>* chainable) : pimpl_(chainable) {}
|
|||||||
Expr::Expr(Float v) : pimpl_(new ConstantNode(keywords::value=v,
|
Expr::Expr(Float v) : pimpl_(new ConstantNode(keywords::value=v,
|
||||||
keywords::shape={1,1})) {}
|
keywords::shape={1,1})) {}
|
||||||
|
|
||||||
Tensor Expr::val() {
|
Tensor &Expr::val() {
|
||||||
return pimpl_->val();
|
return pimpl_->val();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class Expr {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tensor val();
|
Tensor &val();
|
||||||
Tensor grad();
|
Tensor grad();
|
||||||
|
|
||||||
void forward(size_t batchSize);
|
void forward(size_t batchSize);
|
||||||
|
@ -17,7 +17,7 @@ struct Chainable {
|
|||||||
virtual void allocate(size_t) = 0;
|
virtual void allocate(size_t) = 0;
|
||||||
|
|
||||||
virtual const Shape& shape() = 0;
|
virtual const Shape& shape() = 0;
|
||||||
virtual DataType val() = 0;
|
virtual DataType &val() = 0;
|
||||||
virtual DataType grad() = 0;
|
virtual DataType grad() = 0;
|
||||||
virtual void setVal(Tensor t) {
|
virtual void setVal(Tensor t) {
|
||||||
UTIL_THROW2("Tensors can only be assigned to input nodes");
|
UTIL_THROW2("Tensors can only be assigned to input nodes");
|
||||||
@ -82,7 +82,7 @@ class Node : public Chainable<Tensor>,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Tensor val() {
|
virtual Tensor &val() {
|
||||||
UTIL_THROW_IF2(!val_, "Tensor has not been allocated");
|
UTIL_THROW_IF2(!val_, "Tensor has not been allocated");
|
||||||
return val_;
|
return val_;
|
||||||
};
|
};
|
||||||
@ -104,4 +104,4 @@ class Node : public Chainable<Tensor>,
|
|||||||
Tensor adj_;
|
Tensor adj_;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -80,12 +80,12 @@ void Tensor::Load(const std::string &path)
|
|||||||
}
|
}
|
||||||
strm.close();
|
strm.close();
|
||||||
|
|
||||||
Load(hostData);
|
Load(hostData.begin(), hostData.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tensor::Load(const std::vector<float> &values)
|
void Tensor::Load(const std::vector<float>::const_iterator &begin, const std::vector<float>::const_iterator &end)
|
||||||
{
|
{
|
||||||
pimpl_->set(values);
|
pimpl_->set(begin, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
10
src/tensor.h
10
src/tensor.h
@ -158,11 +158,11 @@ class TensorImpl {
|
|||||||
thrust::fill(data_.begin(), data_.end(), value);
|
thrust::fill(data_.begin(), data_.end(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set(const std::vector<Float> &values) {
|
void set(const std::vector<float>::const_iterator &begin, const std::vector<float>::const_iterator &end) {
|
||||||
size_t totSize = GetTotalSize(shape());
|
size_t totSize = GetTotalSize(shape());
|
||||||
std::cerr << "tensor size=" << totSize << " vector size=" << values.size() << std::endl;
|
//std::cerr << "tensor size=" << totSize << " vector size=" << values.size() << std::endl;
|
||||||
assert(totSize == values.size());
|
//assert(totSize == values.size());
|
||||||
thrust::copy(values.begin(), values.end(), data_.begin());
|
thrust::copy(begin, end, data_.begin());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Debug() const
|
std::string Debug() const
|
||||||
@ -275,7 +275,7 @@ class Tensor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Load(const std::string &path);
|
void Load(const std::string &path);
|
||||||
void Load(const std::vector<float> &values);
|
void Load(const std::vector<float>::const_iterator &begin, const std::vector<float>::const_iterator &end);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
63
src/test.cu
63
src/test.cu
@ -12,6 +12,7 @@ int main(int argc, char** argv) {
|
|||||||
using namespace marian;
|
using namespace marian;
|
||||||
using namespace keywords;
|
using namespace keywords;
|
||||||
|
|
||||||
|
const size_t BATCH_SIZE = 500;
|
||||||
const size_t IMAGE_SIZE = 784;
|
const size_t IMAGE_SIZE = 784;
|
||||||
const size_t LABEL_SIZE = 10;
|
const size_t LABEL_SIZE = 10;
|
||||||
|
|
||||||
@ -20,42 +21,62 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
Expr w = param(shape={IMAGE_SIZE, LABEL_SIZE}, name="W0");
|
Expr w = param(shape={IMAGE_SIZE, LABEL_SIZE}, name="W0");
|
||||||
Expr b = param(shape={1, LABEL_SIZE}, name="b0");
|
Expr b = param(shape={1, LABEL_SIZE}, name="b0");
|
||||||
|
|
||||||
Expr z = dot(x, w) + b;
|
Expr z = dot(x, w) + b;
|
||||||
Expr lr = softmax(z, axis=1, name="pred");
|
Expr lr = softmax(z, axis=1, name="pred");
|
||||||
Expr graph = -mean(sum(y * log(lr), axis=1), axis=0, name="cost");
|
Expr graph = -mean(sum(y * log(lr), axis=1), axis=0, name="cost");
|
||||||
//cerr << "lr=" << Debug(lr.val().shape()) << endl;
|
//cerr << "x=" << Debug(lr.val().shape()) << endl;
|
||||||
|
|
||||||
int numofdata;
|
int numofdata;
|
||||||
vector<float> images = datasets::mnist::ReadImages("../examples/mnist/t10k-images-idx3-ubyte", numofdata, IMAGE_SIZE);
|
//vector<float> images = datasets::mnist::ReadImages("../examples/mnist/t10k-images-idx3-ubyte", numofdata, IMAGE_SIZE);
|
||||||
vector<float> labels = datasets::mnist::ReadLabels("../examples/mnist/t10k-labels-idx1-ubyte", numofdata, LABEL_SIZE);
|
//vector<float> labels = datasets::mnist::ReadLabels("../examples/mnist/t10k-labels-idx1-ubyte", numofdata, LABEL_SIZE);
|
||||||
|
vector<float> images = datasets::mnist::ReadImages("../examples/mnist/train-images-idx3-ubyte", numofdata, IMAGE_SIZE);
|
||||||
|
vector<float> labels = datasets::mnist::ReadLabels("../examples/mnist/train-labels-idx1-ubyte", numofdata, LABEL_SIZE);
|
||||||
cerr << "images=" << images.size() << " labels=" << labels.size() << endl;
|
cerr << "images=" << images.size() << " labels=" << labels.size() << endl;
|
||||||
cerr << "numofdata=" << numofdata << endl;
|
cerr << "numofdata=" << numofdata << endl;
|
||||||
|
|
||||||
Tensor tx({numofdata, IMAGE_SIZE}, 1);
|
size_t startInd = 0;
|
||||||
Tensor ty({numofdata, LABEL_SIZE}, 1);
|
size_t startIndData = 0;
|
||||||
|
while (startInd < numofdata) {
|
||||||
|
size_t batchSize = (startInd + BATCH_SIZE < numofdata) ? BATCH_SIZE : numofdata - startInd;
|
||||||
|
cerr << "startInd=" << startInd
|
||||||
|
<< " startIndData=" << startIndData
|
||||||
|
<< " batchSize=" << batchSize << endl;
|
||||||
|
|
||||||
tx.Load(images);
|
Tensor tx({numofdata, IMAGE_SIZE}, 1);
|
||||||
ty.Load(labels);
|
Tensor ty({numofdata, LABEL_SIZE}, 1);
|
||||||
|
|
||||||
cerr << "tx=" << Debug(tx.shape()) << endl;
|
tx.Load(images.begin() + startIndData, images.begin() + startIndData + batchSize * IMAGE_SIZE);
|
||||||
cerr << "ty=" << Debug(ty.shape()) << endl;
|
ty.Load(labels.begin() + startInd, labels.begin() + startInd + batchSize);
|
||||||
|
|
||||||
x = tx;
|
//cerr << "tx=" << Debug(tx.shape()) << endl;
|
||||||
y = ty;
|
//cerr << "ty=" << Debug(ty.shape()) << endl;
|
||||||
|
|
||||||
graph.forward(500);
|
x = tx;
|
||||||
|
y = ty;
|
||||||
|
|
||||||
std::cerr << "z: " << Debug(z.val().shape()) << endl;
|
cerr << "x=" << Debug(x.val().shape()) << endl;
|
||||||
std::cerr << "lr: " << Debug(lr.val().shape()) << endl;
|
cerr << "y=" << Debug(y.val().shape()) << endl;
|
||||||
std::cerr << "Log-likelihood: " << Debug(graph.val().shape()) << endl ;
|
|
||||||
|
|
||||||
//std::cerr << "scores=" << scores.val().Debug() << endl;
|
|
||||||
std::cerr << "lr=" << lr.val().Debug() << endl;
|
|
||||||
|
|
||||||
graph.backward();
|
graph.forward(batchSize);
|
||||||
|
|
||||||
//std::cerr << graph["pred"].val()[0] << std::endl;
|
cerr << "w=" << Debug(w.val().shape()) << endl;
|
||||||
|
cerr << "b=" << Debug(b.val().shape()) << endl;
|
||||||
|
std::cerr << "z: " << Debug(z.val().shape()) << endl;
|
||||||
|
std::cerr << "lr: " << Debug(lr.val().shape()) << endl;
|
||||||
|
std::cerr << "Log-likelihood: " << Debug(graph.val().shape()) << endl ;
|
||||||
|
|
||||||
|
//std::cerr << "scores=" << scores.val().Debug() << endl;
|
||||||
|
std::cerr << "lr=" << lr.val().Debug() << endl;
|
||||||
|
|
||||||
|
graph.backward();
|
||||||
|
|
||||||
|
//std::cerr << graph["pred"].val()[0] << std::endl;
|
||||||
|
|
||||||
|
startInd += batchSize;
|
||||||
|
startIndData += batchSize * IMAGE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// XOR
|
// XOR
|
||||||
|
Loading…
Reference in New Issue
Block a user