Поскольку у вас есть четыре класса и активация softmax на последнем слое, мне кажется очень маловероятным, что ваш выбор class_mode='binary'
для flow_from_directory()
и loss='sparse_categorical_crossentropy'
для classifier.compile()
правильный. Сгенерированные таким образом метки не будут иметь смысла.
class_mode='binary'
будет генерировать метки в форме [0,1,1,0,1,1,...]
, которые имеют смысл только для прогнозирования да / нет (следовательно, «двоичный»), в то время как loss='sparse_categorical_crossentropy'
ожидает метки в форме [1,3,2,4,3,2,1,2,...]
(одно целое число для каждого класса ). [1 122]
Попробуйте вместо class_mode='categorical'
и loss='categorical_crossentropy'
. Это сгенерирует ярлыки с горячим кодированием, например
[[0,0,1,0],
[0,1,0,0],
[0,0,0,1],
... ]
, что именно то, что loss='categorical_crossentropy'
ожидает получить. Также выбор activation='softmax'
в последнем слое идеально подходит для этого, так как он гарантирует, что четыре значения в последнем слое всегда суммируют ap с 1
.
Относительно ваших вопросов:
val_acc
перестанет расти. Да, в вашем случае эта точка достигается уже после двух эпох. Но для хороших моделей это обычная практика. У вашего понимания есть недостаток: отличные результаты на тренировочных данных - не цель! Помните, в конце концов, вы хотите, чтобы ваша модель предсказывала изображения, которых она никогда не видела прежде, поэтому только данные проверки говорят вам правду. (На самом деле, еще лучше иметь еще один тестовый набор данных, который никогда не затрагивался во время обучения, и сравнить его с этим в самом конце после вызова fit
или fit_generator
. из интереса, к какому месту на странице вы привязываете данные? Page_Load?
Попробуйте на OnPreRender - может помочь.
Похоже, что ViewState запускает и заново заполняет данные. В любом случае, если вы в любом случае выполняете привязку данных в каждой обратной передаче, вам, вероятно, следует установить для параметра EnableViewState вашего ListView значение false, чтобы уменьшить размер страницы.
Возможно, ваш QueueListView по какой-то причине повторно привязан.
Попробуйте сбросить значение DataSource после DataBind (), чтобы увидеть, что произойдет
QueueListView.DataBind();
QueueListView.DataSource = null;
Есть ли вероятность, что это проблема кеширования? Я столкнулся с аналогичной проблемой, используя просмотр списка с источником XMLDatasource. Я попытался отключить все состояние просмотра. Я бы связал список в коде позади и использовал XPath, чтобы записать все это на экран на моей странице aspx. Это использовалось при поиске ... в следующий раз, когда я провел поиск, никакой новой информации не обнаружилось. Причина в том, что для источника XMLDatasource по умолчанию включено кэширование. В моем случае я каждый раз попадал в БД, и мне не нужно было кэшировать ее. Я отключил кеширование источника данных, и все мои проблемы были исправлены.
Я упоминаю об этом только потому, что ошибка, которая у меня была, звучит идентично вашей. Я не вижу, как вы извлекаете книгу в привязке данных - и, судя по всему, вы не используете источник данных XML ... но я подумал, что этот комментарий может что-то для вас вызвать. Удачи .... хотя, похоже, вы уже двинулись дальше: -).
Является ли флажок ReadOnly = true или Enabled = false?
У меня возникли проблемы с элементами управления, у которых одно из этих свойств, как указано выше, не обновлялось, как бы я ни пытался управлять этим элементом управления в коде позади. Я бы подумал, что отключение состояния просмотра также обойдет эту маленькую «функцию» ASP.NET, но попробовать стоит.
Кроме того, если элементы сортируются с помощью кода на стороне клиента, сохраняется ли этот порядок при обратной передаче? Я не думаю, что вы можете изменить объект CLR в сеансе с помощью javascript.
Не уверен, поможет ли это, замените <% # Eval ("ProjectAbbrev")%> на Hyperlink.Text, назначенный в методе OnQueueRepeater_ItemDataBound, и посмотрите, все ли строки заполнены правильно.
Вероятно, это не решит вашу проблему, но будет интересно узнать результат.
Я думаю, это связано с порядком, когда различные события запускаются в течение жизненного цикла страницы. См. Обзор жизненного цикла страницы ASP.NET . Вы должны выполнить привязку данных в Page_OnPreRender, чтобы убедиться, что повторное заполнение выполняется после управляющих событий (которые вызовут обновление данных) на странице.