Когда вы используете cross_entropy_with_logits_v2, важно, чтобы вы пропустили логит. Это называется logit к предыдущему значению перед применением softmax. Должно быть так:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=regular_prediction, labels=y))
Эта функция выполняет softmax, а затем cross_entropy. Это так, потому что, если они применяются отдельно в обратном распространении, вы можете иметь числовую нестабильность. Но при одновременном применении он упрощается при обратном распространении и становится на 100% стабильным.
РЕДАКТИРОВАТЬ: cross_entropy_with_logits_v2 представляет собой слой, который выполняет следующие cross_entropy (softmax (x), y). Проблема в том, что в обратном направлении эта комбинация cross_entropy и затем softmax не является численно устойчивой. Вот почему вы получаете нанс. Когда оба они объединены, упрощение выполняется следующим образом: https://deepnotes.io/softmax-crossentropy
Если применить один, а затем другой, тензор потока не будет иметь умение упрощать.
О, и я также нашел это, в случае, если у кого-либо еще есть эта проблема.
Использование пользовательский селектор jQuery для средств управления asp.net: http://john-sheehan.com/blog/custom-jquery-selector-for-aspnet-webforms/
Это сообщение Dave Ward могло бы иметь то, что Вы ищете:
http://encosia.com/2007/08/08/robust-aspnet-control-referencing-in-javascript/
Выборка от статьи:
Действительно существует. Лучшее решение состоит в том, чтобы использовать встроенный код ASP.NET для введения свойства control’s ClientID:
$get('<%= TextBox1.ClientID %>')
Теперь на корректный клиентский идентификатор элемента ссылаются, независимо от структуры страницы и уровня вложенности управления. По-моему, очень небольшая стоимость производительности этого метода определенно стоит того для создания клиента, пишущего сценарий более эластичного для изменения.
И некоторый пример кода Dave от потока комментария того сообщения:
<script>
alert('TextBox1 has a value of: ' + $get('<%= TextBox1.ClientID %>').value);
</script>
поток комментария к статье, которую я связал выше, имеет некоторое хорошее обсуждение также.
Несколько мыслей об этом:
1) у меня была большая удача, получая элементы css классом вместо идентификатора, потому что идентификаторы asp.net не надежны, как Вы заявили. Я использую эту функцию, и она работает обоснованно хорошо:
function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
{
node = document;
}
if ( tag == null )
{
tag = '*';
}
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++)
{
if ( pattern.test(els[i].className) )
{
classElements[j] = els[i];
j++;
}
}
return classElements;
}
2) jQuery помогает здесь много. Используя jQuery можно надежно получить элементы, где идентификатор заканчивается определенной строкой. В то время как это не причина использовать jQuery, это определенно плюс.
3) Это будет зафиксировано в asp.net 4.0, так зависните там:-) http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx
Я не думаю, что существует единственная "лучшая практика" для того, чтобы сделать это. Существует много различных довольно хорошо методы. Здесь является нашим:
Каждое управление, которое имеет клиентскую функциональность, представляет встроенный блок сценария, непосредственно ниже разметки для управления:
<span id="something_crazy_long">
control markup
</span>
<script type="text/javascript">new CustomControl('something_crazy_long');</script>
Каждое управление имеет сопровождение JS как:
var CustomControl = function(id) {
this.control = document.getElementByID(id);
this.init();
};
CustomControl.prototype.init = function() {
//do stuff to wire up relevant events
};
В codebehind, мы делаем что-то как:
class CustomControl : Control
override void Render(HtmlTextWriter writer)
{
writer.WriteBeginTag("span");
writer.WriteAttribute("id", this.ClientID);
writer.Write(HtmlTextWriter.TagRightChar);
//write control markup
writer.WriteEndTag("span");
writer.WriteBeginTag("script");
writer.WriteAttribute("type", "text/javascript");
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(
string.Format("new CustomControl('{0}');", this.ClientID)
);
writer.WriteEndTag("script");
}
Я делаю что-то подобное Королю M кроме избежать нескольких тегов script, я использую функцию в своем базовом классе страницы для регистрации средств управления, я собираюсь использовать сторону клиента, затем выложить их к HTML в 1 теге script.
Вы могли даже разделить свои средства управления на подклассы, чтобы автоматически зарегистрироваться в функции или использовать булево свойство, чтобы установить, собираетесь ли Вы использовать их сторона клиента.