小编Dan*_*iel的帖子

Tensorflow - 使用带有1.2 Estimator API的tf.summary

我正在尝试将一些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.

任何想法为什么这不起作用?

python tensorflow

11
推荐指数
2
解决办法
5861
查看次数

Typescript子类函数重载

如何在打字稿中实现类似于这种模式的东西?

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().

有没有办法实现这种模式,没有上述方法的缺陷?

inheritance overloading typescript

7
推荐指数
1
解决办法
4827
查看次数

引用较旧版本的nuget依赖项的C#库会导致程序集反射失败

我的项目中的一个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加载项目程序集,然后尝试加载所有类型.抛出并显示错误.

.net c# swashbuckle

7
推荐指数
1
解决办法
261
查看次数

Keras - 没有停止和恢复训练的好方法吗?

经过大量研究,似乎没有好的方法可以使用 Tensorflow 2 / Keras 模型正确停止和恢复训练。无论您是使用model.fit() 还是使用自定义训练循环,都是如此。

似乎有 2 种支持的方法可以在训练时保存模型:

  1. 保存模型的只是权重,使用model.save_weights()save_weights_only=Truetf.keras.callbacks.ModelCheckpoint。这似乎是我见过的大多数示例的首选,但是它有许多主要问题:

    • 优化器状态未保存,这意味着训练恢复将不正确。
    • 学习率计划被重置——这对于某些模型来说可能是灾难性的。
    • Tensorboard 日志返回到第 0 步 - 除非实施复杂的解决方法,否则日志记录基本上毫无用处。
  2. 使用model.save()或保存整个模型、优化器等save_weights_only=False。优化器状态已保存(良好),但仍存在以下问题:

    • Tensorboard 日志仍然回到步骤 0
    • 学习率计划仍在重置(!!!)
    • 无法使用自定义指标。
    • 这在使用自定义训练循环时根本不起作用 - 自定义训练循环使用非编译模型,并且似乎不支持保存/加载非编译模型。

我发现的最佳解决方法是使用自定义训练循环,手动保存步骤。这修复了 tensorboard 日志记录,并且可以通过执行类似的操作来修复学习率计划keras.backend.set_value(model.optimizer.iterations, step)。但是,由于完整的模型保存不在表中,因此不会保留优化器状态。我看不出有什么方法可以独立保存优化器的状态,至少不需要做很多工作。像我一样搞乱 LR 时间表也感觉很混乱。

我错过了什么吗?人们如何使用此 API 保存/恢复?

python keras tensorflow tf.keras tensorflow2.0

6
推荐指数
2
解决办法
770
查看次数

2016年打字稿工作流程

我是Web开发的新手。我一直想尝试用Typescript开发一个简单的客户端项目(在这种情况下,是一个游戏,但是这个问题也适用于其他项目)。没有服务器技术,只有在浏览器中运行的技术。

我启动了Webstorm,并设法建立了一个简单的Typescript项目并在数分钟内工作。

但是,当我尝试为较大的项目设置某种结构和合理的工作流程时,我开始遇到似乎疯狂的工具,管理器,构建系统,而每种工具都处于各种折旧状态。

我正在寻找一种简单可靠的方法:

  • 使用多个文件而无需手动添加脚本标签
  • 使用外部类型定义和javascript库并以明智的方式加载它们

对于我自己的代码,似乎es6模块是我最好的选择,但是出于某种原因,看来我仍然需要使用第三方模块加载器?它们似乎种类繁多-commonjs,requirejs,systemjs,webpack。此外,尽管许多来源都建议使用es6,但大多数浏览器仍未完全支持es6,这意味着我也需要进行编译。另外,在某些地方有一个使用gulp / grunt的构建过程,我什至不知道我是否需要使用!

我完全不确定要为外部模块做什么。我尝试过Bower,但似乎仍然需要为所有外部库手动添加标签(这不是一个问题,但我敢肯定有更好的方法!)

这确实是我正在经历的所有事情的总体感觉-当然,有一种更好的做事方法。但是,在无数的过时信息中徘徊意味着我无法找到任何可靠的信息。

因此-前端专家-您对一个完整的新手有何建议,以作为当今Typescript(甚至Javascript)开发的良好工作流程?

workflow webstorm typescript typescript1.8

5
推荐指数
1
解决办法
1139
查看次数

Webpack 3和CommonsChunkPlugin - 从要求供应商中排除特定入口点

我正在研究一大块商业软件,这些软件正在慢慢迁移到所有页面上使用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)

javascript webpack

5
推荐指数
0
解决办法
214
查看次数

DynamoDb - 如何进行批量更新?

来自关系背景,我习惯于写下这样的东西:

UPDATE Table Set X = 1 Where Y = 2
Run Code Online (Sandbox Code Playgroud)

然而,在类似Dynamodb的db中,这样的操作似乎很难实现.假设我已经对Y = 2的项目进行了查询.

我看到它的方式,提供API有两个选项:

  • 做很多很多个人update请求,或者
  • 做一个batch write和写入所有数据的回,应用了更新.

这两种方法看起来都很糟糕,性能也很差.

我错过了一些明显的东西吗?或者非关系型数据库不是为了按照这种规模处理"更新"而设计的 - 如果是这样的话,我可以在不增加性能成本的情况下实现类似的东西吗?

nosql amazon-dynamodb

4
推荐指数
1
解决办法
3053
查看次数

Typescript - 扩展外部Javascript库

我正在构建一个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
推荐指数
1
解决办法
4475
查看次数