我有以下非常简单的单元测试,它重现了DbContext.SaveChanges不是原子的情况.非原子意味着可以在完成所有提交之前读取提交的数据.
添加任务:在循环中,添加新的TestEntity和ReferencingEntity.验证任务:检查是否存在未被任何ReferencingEntity引用的TestEntity - 由于我添加实体的方式,这不应该发生.
单元测试失败......有什么建议吗?
编辑:根据接受的答案 - 为了使用建议的解决方案运行单元测试,添加InitTest方法:
using (var context = new TestContext())
{
var objectContext = (context as IObjectContextAdapter).ObjectContext;
objectContext.ExecuteStoreCommand(string.Format("ALTER DATABASE [{0}] SET READ_COMMITTED_SNAPSHOT ON", context.GetType().FullName));
}
Run Code Online (Sandbox Code Playgroud)
单元测试:
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Atlit.Server.Tests.Integration.SessionProcessing
{
class TestContext : DbContext
{
public DbSet<TestEntity> TestEntities { get; set; }
public DbSet<ReferencingEntity> ReferencingEntities { get; set; }
}
class TestEntity
{
public int TestEntityId { get; set; }
}
class ReferencingEntity
{
public int ReferencingEntityId { get; …Run Code Online (Sandbox Code Playgroud) 对此问题的更准确描述是,当is_training未明确设置为true时,MobileNet会表现不佳.我指的是TensorFlow在其模型库https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.py中提供的MobileNet .
这就是我创建网络的方式(phase_train = True):
with slim.arg_scope(mobilenet_v1.mobilenet_v1_arg_scope(is_training=phase_train)):
features, endpoints = mobilenet_v1.mobilenet_v1(
inputs=images_placeholder, features_layer_size=features_layer_size, dropout_keep_prob=dropout_keep_prob,
is_training=phase_train)
Run Code Online (Sandbox Code Playgroud)
我正在训练一个识别网络,在训练时我在LFW上进行测试.我在培训期间获得的结果随着时间的推移而得到改善并获得了良好的准确性.
在部署之前,我冻结了图表.如果我使用is_training = True冻结图形,我在LFW上获得的结果与训练期间相同.但是,如果我设置is_training = False,我得到的结果就像网络根本没有训练过......
这种行为实际上发生在像Inception这样的其他网络上.
我倾向于认为我错过了一些非常基本的东西,这不是TensorFlow中的错误...
任何帮助,将不胜感激.
添加更多代码......
这就是我准备培训的方式:
images_placeholder = tf.placeholder(tf.float32, shape=(None, image_size, image_size, 1), name='input')
labels_placeholder = tf.placeholder(tf.int32, shape=(None))
dropout_placeholder = tf.placeholder_with_default(1.0, shape=(), name='dropout_keep_prob')
phase_train_placeholder = tf.Variable(True, name='phase_train')
global_step = tf.Variable(0, name='global_step', trainable=False)
# build graph
with slim.arg_scope(mobilenet_v1.mobilenet_v1_arg_scope(is_training=phase_train_placeholder)):
features, endpoints = mobilenet_v1.mobilenet_v1(
inputs=images_placeholder, features_layer_size=512, dropout_keep_prob=1.0,
is_training=phase_train_placeholder)
# loss
logits = slim.fully_connected(inputs=features, num_outputs=train_data.get_class_count(), activation_fn=None,
weights_initializer=tf.truncated_normal_initializer(stddev=0.1),
weights_regularizer=slim.l2_regularizer(scale=0.00005),
scope='Logits', reuse=False)
tf.losses.sparse_softmax_cross_entropy(labels=labels_placeholder, logits=logits, …Run Code Online (Sandbox Code Playgroud) I have a very bug data set for training.
I'm using the data set API like so:
self._dataset = tf.contrib.data.Dataset.from_tensor_slices((self._images_list, self._labels_list))
self._dataset = self._dataset.map(self.load_image)
self._dataset = self._dataset.batch(batch_size)
self._dataset = self._dataset.shuffle(buffer_size=shuffle_buffer_size)
self._dataset = self._dataset.repeat()
self._iterator = self._dataset.make_one_shot_iterator()
Run Code Online (Sandbox Code Playgroud)
If I use for the training a small amount of the data then all is well. If I use all my data then TensorFlow will crash with this error: ValueError: GraphDef cannot be larger than 2GB.
It seems like TensorFlow tries to load all …
我正在使用 Keras 训练模型来检测图像中的对象并在它们周围放置一个边界框。
我想使用 ImageDataGenerator 通过移位/旋转/缩放等来增强图像。
ImageDataGenerator 正在构建一个变换矩阵并使用它来变换图像。
我的问题是,当我得到增强图像后,如何根据增强来调整边界框?
我想说,如果变换矩阵与增强图像一起从 ImageDataGenerator 返回,那就太好了。但事实并非如此。
那么如何正确去做呢?
是否值得为 Keras 提出一个问题来添加此功能?
TensorFlow 2.0 似乎缺少 global_step。
我有几个对当前训练进度感兴趣的回调,我不确定是否需要实现自己的步数计数器或依赖于纪元计数......
有更换建议吗?
我正在使用 TensorFlow 2.1 来训练具有量化感知训练的模型。
这样做的代码是:
import tensorflow_model_optimization as tfmot
model = tfmot.quantization.keras.quantize_annotate_model(model)
Run Code Online (Sandbox Code Playgroud)
这将向图中添加假量化节点。这些节点应该调整模型的权重,以便它们更容易被量化为 int8 并使用 int8 数据。
训练结束后,我将模型转换并量化为 TF-Lite,如下所示:
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = [give data provider]
quantized_tflite_model = converter.convert()
Run Code Online (Sandbox Code Playgroud)
在这一点上,我不希望在 TL-Lite 图中看到假量化层。但令人惊讶的是,我确实看到了它们。此外,当我在 TF-Lite C++示例应用程序中运行这个量化模型时,我发现它在推理过程中也在运行假量化节点。除此之外,它还对每层之间的激活进行反量化和量化。
这是 C++ 代码的输出示例:
节点 0 运算符内置代码 80 FAKE_QUANT
输入:1
输出:237
节点 1 运算符内置代码 114 QUANTIZE
输入:237
输出:238
节点 2 运算符内置代码 3 CONV_2D
输入:238 59 58
输出:167 运算符内置代码 6
临时代码:237
DEQUANTIZE
输入:167
输出:239
节点 4 运算符内置代码 80 FAKE_QUANT
输入:239
输出:166 …
quantization tensorflow tensorflow-lite quantization-aware-training