Почему исключение нулевой ссылки не может назвать объект, который имеет нулевую ссылку?

Вы можете использовать что-то вроде Keras-Vis Library

В основном вы пытаетесь найти вход , который максимизирует определенный класс , это приводит к некоторой одномерной последовательности (в вашем случае последовательность из 300 векторов из 9 элементов).

Затем вы можете построить каждый из 9 каналов отдельно или друг над другом, чтобы понять, как эта штука выглядит. Затем вам нужно обладать знанием предметной области, чтобы попытаться понять, что это значит (если это что-то значит). Это полезно, если вы хотите понять, как выглядят входные данные из определенного класса .

Вы можете сделать то же самое с картами активации ( карты значимости ) (которые вы можете вычислять, используя ту же библиотеку, связанную). Это полезно, если вы хотите понять, где (в пространстве) находится информация .

Теперь, не зная природу, область или контекст ваших данных, трудно сказать что-либо еще ...

Редактировать :

Хорошо, теперь я понимаю вашу проблему. Возможно, стоит попытаться трактовать эту проблему как множественное изучение экземпляров

Вы также можете попробовать использовать LSTM с [ 1119] Механизм внимания .

12
задан Yes - that Jake. 23 February 2009 в 18:30
поделиться

5 ответов

Исключениями являются вещи во время выполнения, переменные являются вещами времени компиляции.

На самом деле переменная в Вашем примере является выражением. Выражения являются не всегда простыми переменными. Во времени выполнения будет оценено выражение, и метод назовут на полученном объекте. Если значение того выражения null, время выполнения бросит a NullReferenceException. Примите следующее:

Dim a as New MyObject
Dim b as String = MyObject.GetNullValue().ToString()

Какое сообщение об ошибке должно возврат во время выполнения если GetNullValue() возвраты метода null?

11
ответ дан 2 December 2019 в 20:19
поделиться

Для языков как Java, которые компилируются в байт-код, который интерпретируется VM, предположите, что у Вас есть класс X с полем x, и его значение null для определенной ссылки. Если Вы пишете

x.foo()

байт-код мог бы быть похожим на это:

push Xref           >> top of stack is ref to instance of X with X.x = null
getField x          >> pops Xref, pushes 'null' on the stack
invokeMethod foo    >> pops 'null' -> runtime exception

Дело в том, что операция, для которой нужна ненулевая ссылка на стеке для работы на него, как invokeMethod в примере, не может и не знать, куда та нулевая ссылка прибыла из.

2
ответ дан 2 December 2019 в 20:19
поделиться

Простой способ поймать это для отладки к поместить Оператор контроля до использования объекта, проверьте на пустой указатель и произведите значимое сообщение.

1
ответ дан 2 December 2019 в 20:19
поделиться

В сборках конечных версий имена переменной разделяются из символов, и код мог бы даже быть оптимизирован, чтобы не иметь определенную ячейку памяти для переменной, но просто сохранить ссылку в одном из регистров (в зависимости от объема переменного использования). Таким образом не могло бы быть возможно вычесть название переменной от ссылочного местоположения.

В отладочной сборке существует больше информации, доступной о переменных. Однако объект исключения должен работать тот же путь независимо от разновидность сборки. Следовательно, это реагирует на минимальную информацию, к которой это может получить доступ в любой разновидности.

1
ответ дан 2 December 2019 в 20:19
поделиться

Несколько вещей...

1) когда Вы заставляете свои собственные исключения иметь это в виду (если Вы будете раздражаться это это для этого, то кто-то еще будет раздражаться в Вас, если Вы сделаете это для чего-то еще). Учитывая, что путь исключения нисколько не должен быть типичным путем, потраченное то, чтобы заставлять времени исключение иметь полезную информацию определенно стоит того.

2) как общее программирование practive принимают этот стиль, и у Вас будет намного меньше проблем (да, Ваш код будет длиннее с точки зрения строк, но Вы сэкономите много времени):

a) никогда не делайте a.b ().c (); сделайте x = a.b (); x.c (); (на отдельных строках) тот способ, которым Вы видите, был пустым или если возврат a.b () является пустым.

b) никогда не передавайте возврат вызова метода в качестве параметра - всегда передают переменные. (нечто ()); должен быть x = нечто (); (x); Этот больше для отладки и способности видеть значение.

Я не знаю, почему среды как .NET и Java не обеспечивают версию времени выполнения, которое действительно имеет больше информации об этих видах исключений, такой как, что индекс был на массиве за пределы, названии переменной, когда это является пустым и т.д...

1
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: