File tree Expand file tree Collapse file tree 6 files changed +15
-21
lines changed Expand file tree Collapse file tree 6 files changed +15
-21
lines changed Original file line number Diff line number Diff line change @@ -20,9 +20,8 @@ class ReaderBase {
20
20
PADDLE_ENFORCE(!shapes_ .empty());
21
21
}
22
22
// Read the next batch of data. (A 'batch' can be only one instance)
23
+ // If the next batch doesn't exist, the 'out' will be an empty std::vector.
23
24
virtual void ReadNext(std::vector<LoDTensor >* out) = 0;
24
- // Show whether the next bacth exists.
25
- virtual bool HasNext() const = 0;
26
25
27
26
// Reinitialize the reader and read the file from the begin.
28
27
virtual void ReInit() = 0;
Original file line number Diff line number Diff line change @@ -26,7 +26,6 @@ class ReaderBase {
26
26
PADDLE_ENFORCE (!shapes_.empty ());
27
27
}
28
28
virtual void ReadNext (std::vector<LoDTensor>* out) = 0;
29
- virtual bool HasNext () const = 0;
30
29
31
30
virtual void ReInit () = 0;
32
31
@@ -52,8 +51,6 @@ class DecoratedReader : public ReaderBase {
52
51
PADDLE_ENFORCE_NOT_NULL (reader_);
53
52
}
54
53
55
- bool HasNext () const override { return reader_->HasNext (); }
56
-
57
54
void ReInit () override { reader_->ReInit (); }
58
55
59
56
protected:
@@ -69,7 +66,6 @@ class ReaderHolder {
69
66
ReaderBase* Get () const { return reader_.get (); }
70
67
71
68
void ReadNext (std::vector<LoDTensor>* out) { reader_->ReadNext (out); }
72
- bool HasNext () const { return reader_->HasNext (); }
73
69
void ReInit () { reader_->ReInit (); }
74
70
75
71
DDim shape (size_t idx) const { return reader_->shape (idx); }
Original file line number Diff line number Diff line change @@ -60,15 +60,16 @@ class ReadOp : public framework::OperatorBase {
60
60
const platform::Place& dev_place) const override {
61
61
framework::ReaderHolder* reader =
62
62
scope.FindVar (Input (" Reader" ))->GetMutable <framework::ReaderHolder>();
63
- if (!reader->HasNext ()) {
63
+ std::vector<std::string> out_arg_names = Outputs (" Out" );
64
+ std::vector<framework::LoDTensor> ins;
65
+ reader->ReadNext (&ins);
66
+ if (ins.empty ()) {
64
67
reader->ReInit ();
68
+ reader->ReadNext (&ins);
65
69
PADDLE_ENFORCE (
66
- reader-> HasNext (),
70
+ !ins. empty (),
67
71
" Reader can not read the next data even it has been re-initialized." );
68
72
}
69
- std::vector<std::string> out_arg_names = Outputs (" Out" );
70
- std::vector<framework::LoDTensor> ins;
71
- reader->ReadNext (&ins);
72
73
PADDLE_ENFORCE_EQ (ins.size (), out_arg_names.size ());
73
74
for (size_t i = 0 ; i < ins.size (); ++i) {
74
75
auto * out =
Original file line number Diff line number Diff line change @@ -68,10 +68,10 @@ void BatchReader::ReadNext(std::vector<framework::LoDTensor>* out) {
68
68
buffer_.clear ();
69
69
buffer_.reserve (batch_size_);
70
70
for (int i = 0 ; i < batch_size_; ++i) {
71
- if (reader_-> HasNext ()) {
72
- buffer_.push_back (std::vector<framework::LoDTensor> ());
73
- reader_-> ReadNext (&buffer_ .back ());
74
- } else {
71
+ buffer_. push_back (std::vector<framework::LoDTensor> ());
72
+ reader_-> ReadNext (& buffer_.back ());
73
+ if (buffer .back (). empty ()) {
74
+ buffer_. pop_back ();
75
75
break ;
76
76
}
77
77
}
Original file line number Diff line number Diff line change @@ -50,8 +50,6 @@ class RandomDataGenerator : public framework::FileReader {
50
50
}
51
51
}
52
52
53
- bool HasNext () const override { return true ; }
54
-
55
53
void ReInit () override { return ; }
56
54
57
55
private:
Original file line number Diff line number Diff line change @@ -39,10 +39,10 @@ void ShuffleReader::ReadNext(std::vector<framework::LoDTensor>* out) {
39
39
buffer_.clear ();
40
40
buffer_.reserve (buffer_size_);
41
41
for (int i = 0 ; i < buffer_size_; ++i) {
42
- if (reader_-> HasNext ()) {
43
- buffer_.push_back (std::vector<framework::LoDTensor> ());
44
- reader_-> ReadNext (& buffer_.back ());
45
- } else {
42
+ buffer_. push_back (std::vector<framework::LoDTensor> ());
43
+ reader_-> ReadNext (& buffer_.back ());
44
+ if ( buffer_.back (). empty ()) {
45
+ buffer_. pop_back ();
46
46
break ;
47
47
}
48
48
}
You can’t perform that action at this time.
0 commit comments