Является ExpectedExceptionAttribute NUNIT только способом протестировать, если что-то повышает исключение?

Часть 1: Проблема действительно в типе данных вашего ввода. По умолчанию ваша модель keras ожидает float32, но вы передаете float64. Вы можете либо изменить dtype модели, либо изменить ввод на float32.

Чтобы изменить свою модель:

def make_model():
    net = tf.keras.Sequential()
    net.add(tf.keras.layers.Dense(4, activation='relu', dtype='float32'))
    net.add(tf.keras.layers.Dense(4, activation='relu'))
    net.add(tf.keras.layers.Dense(1))
    return net

Чтобы изменить ввод: y = y.astype('float32')

Часть 2: Вам необходимо вызвать функцию, которая вычисляет вашу модель (то есть model(data)) под tf.GradientTape (). Например, вы можете заменить ваш метод compute_loss следующим:

def compute_loss(model, x, y):
    pred = model(x)
    return tf.reduce_mean(tf.square(tf.subtract(pred, y)))
5
задан Dariusz Walczak 4 November 2008 в 20:07
поделиться

5 ответов

Я удивлен, что еще не видел этот шаблон, упомянутый. David Arno очень похож, но я предпочитаю простоту этого:

try
{
    obj.SetValueAt(-1, "foo");
    Assert.Fail("Expected exception");
}
catch (IndexOutOfRangeException)
{
    // Expected
}
Assert.IsTrue(obj.IsValid());
13
ответ дан 18 December 2019 в 05:40
поделиться

Если можно использовать NUnit 2.5 там существуют некоторые хорошие помощники.

Assert.That( delegate { ... }, Throws.Exception<ArgumentException>())
10
ответ дан 18 December 2019 в 05:40
поделиться

Ваш предпочтительный синтаксис:

Assert.Raises( "System.IndexOutOfRangeException",
               obj.SetValueAt( -1, "foo" ) );

woiuldn't работают с C# так или иначе - obj. SetValueAt был бы оценен, и результат передал для Утверждения. Повышения. Если бы SetValue выдает исключение, то Вы никогда не входили бы, Утверждают. Повышения.

Вы могли записать вспомогательный метод сделать это:

void Raises<T>(Action action) where T:Exception {
   try {
      action();
      throw new ExpectedException(typeof(T));
   catch (Exception ex) {
      if (ex.GetType() != typeof(T)) {
         throw;
      }
   }
}

Который позволяет подобный синтаксис:

Assert.Raises<System.IndexOutOfRangeException>(() => 
  obj.SetValueAt(-1, "foo")
;
2
ответ дан 18 December 2019 в 05:40
поделиться

Синтаксис MbUnit

Assert.Throws<IndexOutOfRangeException>(delegate {
    int[] nums = new int[] { 0, 1, 2 };
    nums[3] = 3;
});
4
ответ дан 18 December 2019 в 05:40
поделиться

Я всегда принимал следующий подход:

bool success = true;
try {
    obj.SetValueAt(-1, "foo");
} catch () {
    success = false;
}

assert.IsFalse(success);

...
2
ответ дан 18 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

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