我正在尝试将一些TensorBoard日志记录添加到使用新的tf.estimator API的模型中.
我有一个钩子设置如下:
summary_hook = tf.train.SummarySaverHook(
save_secs=2,
output_dir=MODEL_DIR,
summary_op=tf.summary.merge_all())
# ...
classifier.train(
input_fn,
steps=1000,
hooks=[summary_hook])
Run Code Online (Sandbox Code Playgroud)
在我model_fn,我也创造了summary-
def model_fn(features, labels, mode):
# ... model stuff, calculate the value of loss
tf.summary.scalar("loss", loss)
# ...
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,我从以下错误中得到以下错误summary_hook:
Exactly one of scaffold or summary_op must be provided.这可能是因为tf.summary.merge_all()找不到任何摘要并且正在返回None,尽管tf.summary.scalar我已在声明中声明了model_fn.
任何想法为什么这不起作用?
如何在打字稿中实现类似于这种模式的东西?
class A {
Init(param1: number) {
// some code
}
}
class B extends A {
Init(param1: number, param2: string) {
// some more code
}
}
Run Code Online (Sandbox Code Playgroud)
上面剪切的代码看起来应该可以正常工作,但是仔细检查一下Typescript函数重载是如何工作的,就会抛出一个错误:
TS2415: 'Class 'B' incorrectly extends base class 'A'.
Types of property 'Init' are incompatible.
Run Code Online (Sandbox Code Playgroud)
我知道构造函数允许这种行为,但是我不能在这里使用构造函数,因为这些对象被用于内存效率.
我可以在A类中提供另一个Init()定义:
class A {
Init(param1: number, param2: string): void;
Init(param1: number) {
// some code
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这不太理想,因为现在基类需要知道它的所有派生类.
第三个选项是重命名B类中的Init方法,但这不仅非常丑陋和令人困惑,而是在基类中暴露出Init()方法,这会在基类中导致难以检测的错误错误地调用了Init().
有没有办法实现这种模式,没有上述方法的缺陷?
我的项目中的一个nuget依赖项(Swashbuckle)需要一个版本的System.Web.Http库(4.0.0.0),它比项目其余部分(5.2.3.0)所需的版本旧.
Swashbuckle要求我编写一个实现某个接口的类:
public class OperationFilter : Swashbuckle.Swagger.IOperationFilter
{
public void Apply(Swashbuckle.Swagger.Operation operation, Swashbuckle.Swagger.SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
{
}
}
Run Code Online (Sandbox Code Playgroud)
上面的重要部分是apiDescription参数Apply.
正常构建项目时,上面编译并运行正常.但是,当我反思正在运行的程序集时assembly.GetTypes(),
var asm = System.Reflection.Assembly.GetExecutingAssembly();
var types = asm.GetTypes()
Run Code Online (Sandbox Code Playgroud)
一个ReflectionTypeLoadException被抛出,有以下装载机异常详细信息:
Method 'Apply' in type 'OperationFilter' from assembly 'MyAssembly,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an
implementation.
Run Code Online (Sandbox Code Playgroud)
这个问题引用了上述例外情况,但没有一个解决方案似乎有效.我尝试通过向Web.config添加bindingRedirect来解决此问题:
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
但是,这似乎没有做任何事情.
如何才能正确加载此类型?
编辑:我已经创建了一个最小的问题再现.构建任务BuildTask.targets加载项目程序集,然后尝试加载所有类型.抛出并显示错误.
经过大量研究,似乎没有好的方法可以使用 Tensorflow 2 / Keras 模型正确停止和恢复训练。无论您是使用model.fit() 还是使用自定义训练循环,都是如此。
似乎有 2 种支持的方法可以在训练时保存模型:
保存模型的只是权重,使用model.save_weights()或save_weights_only=True用tf.keras.callbacks.ModelCheckpoint。这似乎是我见过的大多数示例的首选,但是它有许多主要问题:
使用model.save()或保存整个模型、优化器等save_weights_only=False。优化器状态已保存(良好),但仍存在以下问题:
我发现的最佳解决方法是使用自定义训练循环,手动保存步骤。这修复了 tensorboard 日志记录,并且可以通过执行类似的操作来修复学习率计划keras.backend.set_value(model.optimizer.iterations, step)。但是,由于完整的模型保存不在表中,因此不会保留优化器状态。我看不出有什么方法可以独立保存优化器的状态,至少不需要做很多工作。像我一样搞乱 LR 时间表也感觉很混乱。
我错过了什么吗?人们如何使用此 API 保存/恢复?
我是Web开发的新手。我一直想尝试用Typescript开发一个简单的客户端项目(在这种情况下,是一个游戏,但是这个问题也适用于其他项目)。没有服务器技术,只有在浏览器中运行的技术。
我启动了Webstorm,并设法建立了一个简单的Typescript项目并在数分钟内工作。
但是,当我尝试为较大的项目设置某种结构和合理的工作流程时,我开始遇到似乎疯狂的工具,管理器,构建系统,而每种工具都处于各种折旧状态。
我正在寻找一种简单可靠的方法:
对于我自己的代码,似乎es6模块是我最好的选择,但是出于某种原因,看来我仍然需要使用第三方模块加载器?它们似乎种类繁多-commonjs,requirejs,systemjs,webpack。此外,尽管许多来源都建议使用es6,但大多数浏览器仍未完全支持es6,这意味着我也需要进行编译。另外,在某些地方有一个使用gulp / grunt的构建过程,我什至不知道我是否需要使用!
我完全不确定要为外部模块做什么。我尝试过Bower,但似乎仍然需要为所有外部库手动添加标签(这不是一个大问题,但我敢肯定有更好的方法!)
这确实是我正在经历的所有事情的总体感觉-当然,有一种更好的做事方法。但是,在无数的过时信息中徘徊意味着我无法找到任何可靠的信息。
因此-前端专家-您对一个完整的新手有何建议,以作为当今Typescript(甚至Javascript)开发的良好工作流程?
我正在研究一大块商业软件,这些软件正在慢慢迁移到所有页面上使用Webpack.我想开始将一些webpack-bundled helper typescript代码合并到尚未开始使用webpack的页面中 - 它们以老式的方式包含脚本.
以下是配置的相关部分:
entry: {
vendor: [
// All vendor scripts go here
],
// All entry points for 'webpack' pages...
// A special entry point that I want to inject into non-webpack pages
es5Compatibility: [
'Utility/ES5Compatibility.ts'
]
},
// ...
output: {
path: path.join(__dirname, 'Scripts/bundle'),
filename: '[name].[chunkhash].bundle.js',
chunkFilename: '[id].chunk.js'
},
plugins: [
// ...
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: Infinity
})
// This should NOT get injected into non-webpack pages, as all of the
// vendor …Run Code Online (Sandbox Code Playgroud) 来自关系背景,我习惯于写下这样的东西:
UPDATE Table Set X = 1 Where Y = 2
Run Code Online (Sandbox Code Playgroud)
然而,在类似Dynamodb的db中,这样的操作似乎很难实现.假设我已经对Y = 2的项目进行了查询.
我看到它的方式,提供API有两个选项:
update请求,或者batch write和写入所有数据的回,应用了更新.这两种方法看起来都很糟糕,性能也很差.
我错过了一些明显的东西吗?或者非关系型数据库不是为了按照这种规模处理"更新"而设计的 - 如果是这样的话,我可以在不增加性能成本的情况下实现类似的东西吗?
我正在构建一个Typescript应用程序,我正在使用外部js库(pixi.js用于渲染).我有.d.ts文件,它一切正常.
该文件声明了一个类Point:
export class Point {
x: number;
y: number;
constructor(x?: number, y?: number);
clone(): Point;
copy(p: Point): void;
equals(p: Point): boolean;
set(x?: number, y?: number): void;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何可行的方法来为这个或其他在.d.ts文件中声明的类添加功能.例如,在这种情况下,我真的可以使用add(),subtract(),negate()方法等.
编辑:为了澄清,我不想通过创建子类来扩展这个类.我想为类本身添加功能.我不想在我的代码中处理两个类(例如Point和PointEx) - pixi在内部使用Point并经常从函数返回它,因此我不希望将Point转换为扩展对象的额外开销.
typescript ×3
python ×2
tensorflow ×2
.net ×1
c# ×1
inheritance ×1
javascript ×1
keras ×1
nosql ×1
overloading ×1
swashbuckle ×1
tf.keras ×1
webpack ×1
webstorm ×1
workflow ×1