30 #ifndef SHARK_UNSUPERVISED_RBM_RBM_H 31 #define SHARK_UNSUPERVISED_RBM_RBM_H 35 #include <shark/Unsupervised/RBM/Impl/AverageEnergyGradient.h> 38 #include <boost/serialization/string.hpp> 42 template<
class VisibleLayerT,
class H
iddenLayerT,
class RngT>
58 RealMatrix m_weightMatrix;
61 HiddenType m_hiddenNeurons;
64 VisibleType m_visibleNeurons;
74 void evalForward(BatchInputType
const& state,BatchOutputType& output)
const{
75 std::size_t batchSize=state.size1();
76 typename HiddenType::StatisticsBatch statisticsBatch(batchSize,
numberOfHN());
95 void evalBackward(BatchInputType
const& state,BatchOutputType& output)
const{
96 std::size_t batchSize = state.size1();
97 typename VisibleType::StatisticsBatch statisticsBatch(batchSize,
numberOfVN());
112 RBM(RngType&
rng):mpe_rng(&rng),m_forward(true),m_evalMean(true)
122 parameters += m_hiddenNeurons.numberOfParameters();
123 parameters += m_visibleNeurons.numberOfParameters();
146 m_weightMatrix.resize(hiddenNeurons,visibleNeurons);
147 m_weightMatrix.clear();
149 m_hiddenNeurons.resize(hiddenNeurons);
150 m_visibleNeurons.resize(visibleNeurons);
155 return m_hiddenNeurons;
159 return m_hiddenNeurons;
163 return m_visibleNeurons;
167 return m_visibleNeurons;
172 return m_weightMatrix;
176 return m_weightMatrix;
202 m_evalMean = evalMean;
206 return boost::shared_ptr<State>(
new EmptyState());
221 void eval(BatchInputType
const& patterns,BatchOutputType& outputs)
const{
223 evalForward(patterns,outputs);
226 evalBackward(patterns,outputs);
231 void eval(BatchInputType
const& patterns, BatchOutputType& outputs,
State& state)
const{
232 eval(patterns,outputs);
239 void inputHidden(RealMatrix& inputs, RealMatrix
const& visibleStates)
const{
240 SIZE_CHECK(visibleStates.size1() == inputs.size1());
241 SIZE_CHECK(inputs.size2() == m_hiddenNeurons.size());
242 SIZE_CHECK( visibleStates.size2() == m_visibleNeurons.size());
244 noalias(inputs) =
prod(m_visibleNeurons.phi(visibleStates),
trans(m_weightMatrix));
252 void inputVisible(RealMatrix& inputs, RealMatrix
const& hiddenStates)
const{
253 SIZE_CHECK(hiddenStates.size1() == inputs.size1());
254 SIZE_CHECK(inputs.size2() == m_visibleNeurons.size());
256 noalias(inputs) =
prod(m_hiddenNeurons.phi(hiddenStates),m_weightMatrix);
264 return m_hiddenNeurons.size();
268 return m_visibleNeurons.size();
273 archive >> m_weightMatrix;
274 archive >> m_hiddenNeurons;
275 archive >> m_visibleNeurons;
281 std::stringstream stream(str);
287 archive << m_weightMatrix;
288 archive << m_hiddenNeurons;
289 archive << m_visibleNeurons;
291 std::stringstream stream;
293 std::string str = stream.str();