Часть 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)))
Я удивлен, что еще не видел этот шаблон, упомянутый. David Arno очень похож, но я предпочитаю простоту этого:
try
{
obj.SetValueAt(-1, "foo");
Assert.Fail("Expected exception");
}
catch (IndexOutOfRangeException)
{
// Expected
}
Assert.IsTrue(obj.IsValid());
Если можно использовать NUnit 2.5 там существуют некоторые хорошие помощники.
Assert.That( delegate { ... }, Throws.Exception<ArgumentException>())
Ваш предпочтительный синтаксис:
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")
;
Синтаксис MbUnit
Assert.Throws<IndexOutOfRangeException>(delegate {
int[] nums = new int[] { 0, 1, 2 };
nums[3] = 3;
});
Я всегда принимал следующий подход:
bool success = true;
try {
obj.SetValueAt(-1, "foo");
} catch () {
success = false;
}
assert.IsFalse(success);
...