<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vektor &amp;quot;schrumpft&amp;quot; wieder zusammen]]></title><description><![CDATA[<p>Hi,</p>
<p>mein Ziel ist es ein neuronales Netzwerk selbst zu programieren. Ich habe mir dazu eine Klasse entworfen.<br />
feedForwardNet.h:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

#pragma once
class feedForwardNet
{
public:
	feedForwardNet(int, std::vector&lt;int&gt;, int);
	~feedForwardNet(void);
	int get_nbrOfLayers();

...

private:
	std::vector&lt; std::vector &lt; std::vector&lt;double&gt; &gt; &gt; weights; //als Vektor von Matrizen zu interpretieren
};
</code></pre>
<p>feedForwardNet.cpp:</p>
<pre><code class="language-cpp">#include &quot;feedForwardNet.h&quot;
#include &lt;iostream&gt;

feedForwardNet::feedForwardNet(int input, std::vector&lt;int&gt; hidden, int output)//Prüfen ob Werte größer 0!
{
	std::vector&lt; std::vector &lt; std::vector&lt;double&gt; &gt; &gt; weights;
	weights.resize(1+hidden.size());

	if (hidden.size())
	{
		weights.front().resize(hidden.front());
	}
	else
	{
		weights.front().resize(output);
	}
	for (int i=0; i&lt;weights.front().size(); i++)
	{
		weights.front()[i].resize(input+1);
	}

	for (int l=0; l&lt;(static_cast&lt;int&gt;(hidden.size())-1); l++)
	{
		weights[l+1].resize(hidden[l+1]);
		for (int i=0; i&lt;weights[l+1].size(); i++)
		{
			weights[l+1][i].resize(hidden[l]+1);
		}
	}
	weights[static_cast&lt;int&gt;(hidden.size())].resize(output);
	if (hidden.size())
	{
		for (int i=0; i&lt;weights.back().size(); i++)
		{
			weights.back()[i].resize(hidden.back()+1);
		}
	}

	for (int l=0; l&lt;weights.size(); l++)
	{
		for (int i=0; i&lt;weights[l].size(); i++)
		{
			weights[l][i][0] = -1;
			for (int j=1; j&lt;weights[l][i].size(); j++)
			{
				weights[l][i][j] = l+i+j;
			}
		}
	}
	std::cout &lt;&lt; weights.size() &lt;&lt; &quot;\n&quot;; //spuckt entsprechende Anzahl an Matrizen/Schichten aus
};

feedForwardNet::~feedForwardNet(void)
{
}

...

int feedForwardNet::get_layerInputSize(int nbrOfLayer)
{
	return weights[nbrOfLayer][0].size(); //gibt immer nur 0 aus
}

...
</code></pre>
<p>Wenn ich mir nun eine Instanz erzeuge und innheralb des Konstruktors nach der Länge des &quot;äußeren&quot; Vektors frage, wird mir die richtige größe ausgegeben.<br />
Wenn ich nun aber nach der Erzeugung wieder nach der Größe des &quot;äußeren&quot; Vektors frage, wird mir nur eine Null ausgegeben.<br />
Ich hab auch schon mal meine Konstruktion extrem vereinfacht und nur mit</p>
<pre><code class="language-cpp">private:
std::vector&lt;double&gt; weights;
...
</code></pre>
<p>gearbeitet und dabei alles überflüssige entfernt. Mit dem gleichen Ergebnis.</p>
<p>Irgendwie scheint meine Instanz sofort nach ihrer Erzeugung ihre Länge zu vergessen.<br />
Natürlich kann ich deshalb auch nicht auf die Matrizen im &quot;Inneren&quot; zugreifen, weil die nicht mehr im Vektor gelistet sind.</p>
<p>Hoffe, mir kann jemand helfen.</p>
<p>Gruß,<br />
schmitzlipp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290511/vektor-quot-schrumpft-quot-wieder-zusammen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 13:29:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290511.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jul 2011 22:54:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor &amp;quot;schrumpft&amp;quot; wieder zusammen on Wed, 27 Jul 2011 22:54:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>mein Ziel ist es ein neuronales Netzwerk selbst zu programieren. Ich habe mir dazu eine Klasse entworfen.<br />
feedForwardNet.h:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

#pragma once
class feedForwardNet
{
public:
	feedForwardNet(int, std::vector&lt;int&gt;, int);
	~feedForwardNet(void);
	int get_nbrOfLayers();

...

private:
	std::vector&lt; std::vector &lt; std::vector&lt;double&gt; &gt; &gt; weights; //als Vektor von Matrizen zu interpretieren
};
</code></pre>
<p>feedForwardNet.cpp:</p>
<pre><code class="language-cpp">#include &quot;feedForwardNet.h&quot;
#include &lt;iostream&gt;

feedForwardNet::feedForwardNet(int input, std::vector&lt;int&gt; hidden, int output)//Prüfen ob Werte größer 0!
{
	std::vector&lt; std::vector &lt; std::vector&lt;double&gt; &gt; &gt; weights;
	weights.resize(1+hidden.size());

	if (hidden.size())
	{
		weights.front().resize(hidden.front());
	}
	else
	{
		weights.front().resize(output);
	}
	for (int i=0; i&lt;weights.front().size(); i++)
	{
		weights.front()[i].resize(input+1);
	}

	for (int l=0; l&lt;(static_cast&lt;int&gt;(hidden.size())-1); l++)
	{
		weights[l+1].resize(hidden[l+1]);
		for (int i=0; i&lt;weights[l+1].size(); i++)
		{
			weights[l+1][i].resize(hidden[l]+1);
		}
	}
	weights[static_cast&lt;int&gt;(hidden.size())].resize(output);
	if (hidden.size())
	{
		for (int i=0; i&lt;weights.back().size(); i++)
		{
			weights.back()[i].resize(hidden.back()+1);
		}
	}

	for (int l=0; l&lt;weights.size(); l++)
	{
		for (int i=0; i&lt;weights[l].size(); i++)
		{
			weights[l][i][0] = -1;
			for (int j=1; j&lt;weights[l][i].size(); j++)
			{
				weights[l][i][j] = l+i+j;
			}
		}
	}
	std::cout &lt;&lt; weights.size() &lt;&lt; &quot;\n&quot;; //spuckt entsprechende Anzahl an Matrizen/Schichten aus
};

feedForwardNet::~feedForwardNet(void)
{
}

...

int feedForwardNet::get_layerInputSize(int nbrOfLayer)
{
	return weights[nbrOfLayer][0].size(); //gibt immer nur 0 aus
}

...
</code></pre>
<p>Wenn ich mir nun eine Instanz erzeuge und innheralb des Konstruktors nach der Länge des &quot;äußeren&quot; Vektors frage, wird mir die richtige größe ausgegeben.<br />
Wenn ich nun aber nach der Erzeugung wieder nach der Größe des &quot;äußeren&quot; Vektors frage, wird mir nur eine Null ausgegeben.<br />
Ich hab auch schon mal meine Konstruktion extrem vereinfacht und nur mit</p>
<pre><code class="language-cpp">private:
std::vector&lt;double&gt; weights;
...
</code></pre>
<p>gearbeitet und dabei alles überflüssige entfernt. Mit dem gleichen Ergebnis.</p>
<p>Irgendwie scheint meine Instanz sofort nach ihrer Erzeugung ihre Länge zu vergessen.<br />
Natürlich kann ich deshalb auch nicht auf die Matrizen im &quot;Inneren&quot; zugreifen, weil die nicht mehr im Vektor gelistet sind.</p>
<p>Hoffe, mir kann jemand helfen.</p>
<p>Gruß,<br />
schmitzlipp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098772</guid><dc:creator><![CDATA[schmitzlipp]]></dc:creator><pubDate>Wed, 27 Jul 2011 22:54:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor &amp;quot;schrumpft&amp;quot; wieder zusammen on Wed, 27 Jul 2011 22:58:56 GMT]]></title><description><![CDATA[<p>Du hast am Anfang des Konstruktors eine lokale Variable &quot;weights&quot; definiert - diese überdeckt die gleichnamige Membervariable und wird am Ende des Konstruktors wieder zerstört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098773</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 27 Jul 2011 22:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor &amp;quot;schrumpft&amp;quot; wieder zusammen on Wed, 27 Jul 2011 23:06:49 GMT]]></title><description><![CDATA[<p>Autsch... ist ja schon spät!<br />
Vielen Dank, das hätte ich heute nicht mehr selbst gesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2098774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2098774</guid><dc:creator><![CDATA[schmitzlipp]]></dc:creator><pubDate>Wed, 27 Jul 2011 23:06:49 GMT</pubDate></item></channel></rss>