Exemple #1
0
PackerBase::PackerBase(MemoryProviderPtr memoryProvider,
                       SequenceEnumeratorPtr sequenceEnumerator,
                       const std::vector<StreamDescriptionPtr>& streams) :
    m_sequenceEnumerator(sequenceEnumerator),
    m_minibatchSize(0),
    m_outputStreamDescriptions(streams)
{
    m_inputStreamDescriptions = sequenceEnumerator->GetStreamDescriptions();
    assert(m_inputStreamDescriptions.size() != 0);
    assert(m_inputStreamDescriptions.size() == m_outputStreamDescriptions.size());

    m_streamBuffers.reserve(m_outputStreamDescriptions.size());

    // Sanity checks:
    for (size_t i = 0; i < m_outputStreamDescriptions.size(); ++i)
    {
        const auto& stream = m_outputStreamDescriptions[i];
        UNUSED(stream);

        // Input and output should match in everything except for sparse/dense storage type.
        assert(stream->m_elementType == ElementType::tfloat || stream->m_elementType == ElementType::tdouble);
        assert(stream->m_name == m_inputStreamDescriptions[i]->m_name);
        assert(stream->m_id == m_inputStreamDescriptions[i]->m_id);
        assert(GetSampleSize(m_inputStreamDescriptions[i]) == GetSampleSize(stream));

        if (m_inputStreamDescriptions[i]->m_storageType == StorageType::dense &&
                stream->m_storageType == StorageType::sparse_csc)
        {
            RuntimeError("Dense to sparse re-packing requested for stream '%ls' is not supported.",
                         stream->m_name.c_str());
        }

        m_streamBuffers.push_back(StreamBuffer(memoryProvider));
    }
}
Exemple #2
0
PackerBase::PackerBase(MemoryProviderPtr memoryProvider,
    SequenceEnumeratorPtr sequenceEnumerator,
    const std::vector<StreamDescriptionPtr>& streams) :
    m_sequenceEnumerator(sequenceEnumerator),
    m_minibatchSize(0),
    m_outputStreamDescriptions(streams)
{
    m_inputStreamDescriptions = sequenceEnumerator->GetStreamDescriptions();
    assert(m_inputStreamDescriptions.size() != 0);
    assert(m_inputStreamDescriptions.size() == m_outputStreamDescriptions.size());

    m_streamBuffers.reserve(m_outputStreamDescriptions.size());
    m_checkSampleShape.resize(m_outputStreamDescriptions.size(), false);

    // Sanity checks:
    for (size_t i = 0; i < m_outputStreamDescriptions.size(); ++i)
    {
        const auto& stream = m_outputStreamDescriptions[i];
        UNUSED(stream);

        // Input and output should match in everything except for sparse/dense storage type.
        assert(stream->m_elementType == ElementType::tfloat || stream->m_elementType == ElementType::tdouble);
        assert(stream->m_name == m_inputStreamDescriptions[i]->m_name);
        assert(stream->m_id == m_inputStreamDescriptions[i]->m_id);

        if (m_inputStreamDescriptions[i]->m_sampleLayout == nullptr)
        {
            // Have to check shapes for each and every sequence.
            m_checkSampleShape[i] = true;
        }
        // Shape the same for complete stream, checking only input/output stream shape.
        else if (GetSampleSize(m_inputStreamDescriptions[i]) != GetSampleSize(stream))
        {
            RuntimeError("Packer cannot unify samples of different dimensions for stream '%ls'.", m_inputStreamDescriptions[i]->m_name.c_str());
        }

        if (m_inputStreamDescriptions[i]->m_storageType == StorageType::dense &&
            stream->m_storageType == StorageType::sparse_csc)
        {
            RuntimeError("Dense to sparse re-packing requested for stream '%ls' is not supported.",
                stream->m_name.c_str());
        }

        m_streamBuffers.push_back(StreamBuffer(memoryProvider));
    }
}