我正在使用tensorflow 0.10,我正在对官方HowTo中读取数据的示例进行基准测试.本文介绍了使用相同的MNIST示例将数据移动到tensorflow的不同方法.
我对结果感到惊讶,我想知道是否有人有足够的低层次理解来解释正在发生的事情.
在HowTo中,基本上有3种方法可以读入数据:
Feeding:在python中构建迷你批处理并传递它 sess.run(..., feed_dict={x: mini_batch})Reading from files:使用tf操作打开文件并创建小批量.(在python中绕过处理数据.)Preloaded data:将所有数据加载到单个tf变量或常量中,并使用tf函数将其分解为小批量.变量或常量固定到cpu,而不是gpu.我用来运行基准测试的脚本位于tensorflow中:
Feeding:examples/tutorials/mnist/fully_connected_feed.pyReading from files:examples/how_tos/reading_data/convert_to_records.py和examples/how_tos/reading_data/fully_connected_reader.pyPreloaded data (constant):examples/how_tos/reading_data/fully_connected_preloaded.pyPreloaded data (variable):examples/how_tos/reading_data/fully_connected_preloaded_var.py我没有修改这些脚本,除了最后两个因为它们崩溃 - 至少版本0.10 - 除非我添加一个额外的sess.run(tf.initialize_local_variables()).
在GTX1060上运行100个小批量100个示例的时间:
Feeding: ~0.001 sReading from files: ~0.010 sPreloaded data (constant): ~0.010 sPreloaded data (variable): ~0.010 s这些结果对我来说非常令人惊讶.我Feeding原本期望它是最慢的,因为它在python中几乎完成所有操作,而其他方法使用较低级别的tensorflow/C++来执行类似的操作.这与我的预期完全相反.有谁知道发生了什么?
我正在阅读Java Threads 3rd Ed.由奥克斯和黄(O'Reilly 2004).他们在整本书中都有一个Swing打字游戏的例子.他们定义的类主要是自定义子类javax.swing.JComponent.
对我来说似乎完全错误的是,他们JComponent使用各种同步方法使这些线程安全.我的印象是Swing组件不应该是线程安全的,而是应该始终从Swing事件调度线程访问它们.(有趣的是,他们通过Swing EDT修改组件的次数之一,它是a setText,这是很少有不需要从EDT调用的Swing方法之一.)
我想知道一些有很多编写/阅读Swing代码经验的人:程序员是否常常使Swing组件同步而不是总是通过EDT修改它们?它可以忍受吗?
编辑:
我注意到它与这个帖子几乎是同一个问题.然而,它没有说明程序员在野外实际做了什么.我很困惑,O'Reilly的书会如此公然违反Swing线程模型.
编辑:
我发现他们在本书的中间部分简要解释了Swing线程模型.尽管如此,我想回答一下我的问题.我觉得大多数阅读本书的人最终会违反Swing线程模型,因为他们的大多数例子都是如此.
编辑:
如果要查看代码,可以将示例代码下载为zip文件.例如,参见ch03/example1/AnimatedCharacterDisplayCanvas.
编辑:
我刚刚了解到setText在Java7中不会是线程安全的(2011年7月发布).
查看CyclicBarrier的javadocs,我在类文档中发现了以下语句,我并不完全理解.来自javadoc:
如果屏障操作不依赖于各方在执行时被暂停,那么该方中的任何线程都可以在释放时执行该操作.为了促进这一点,每次调用await()都会返回该线程在屏障处的到达索引.然后,您可以选择应执行屏障操作的线程,例如:
if (barrier.await() == 0) {
// log the completion of this iteration
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释如何在所有各方调用.await()之后指定一个特定线程来执行屏障操作并提供一个示例吗?
我用List(1, 2, 3, 4) ::: List(1, 2, 5) distinct这个问题.它回来了List(1, 2, 3, 4, 5).
如何在java中实现相同的功能,并非常有效和优雅地做到这一点???
我试图展平一个地图,其中键是可遍历的,从某种意义上说:
Map( Set(1, 2, 3) -> 'A', Set(4, 5, 6) -> 'B')
Run Code Online (Sandbox Code Playgroud)
应该扁平化为:
Map(5 -> B, 1 -> A, 6 -> B, 2 -> A, 3 -> A, 4 -> B)
Run Code Online (Sandbox Code Playgroud)
这是我所做的:
def fuse[A, B, T <: Traversable[A]](mapOfTravs: Map[T, B]): Map[A, B] = {
val pairs = for {
trav <- mapOfTravs.keys
key <- trav
} yield (key, mapOfTravs(trav))
pairs.toMap
}
Run Code Online (Sandbox Code Playgroud)
有用。但:
有没有更简单的方法来做到这一点?
我对 Scala 类型系统不是很满意,我相信这可以改进。每当我使用我的函数时,我都必须明确指定类型:
val map2 = Map( Set(1, 2, 3) -> 'A', Set(4, 5, 6) -> 'B') …Run Code Online (Sandbox Code Playgroud)我有一组对象,我需要对它进行一些转换.目前我正在使用:
var myObjects: List<MyObject> = getMyObjects()
myObjects.forEach{ myObj ->
someMethod(myObj)
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我希望通过someMethod()并行运行来加速它,而不是等待每个对象完成,然后再开始下一个.
在Kotlin有什么办法吗?也许还有doAsyncTask什么?
我知道一年前问这个问题的时候是不可能的,但是现在Kotlin已经像doAsyncTask我一样好奇,如果有任何协同程序可以提供帮助的话
我需要在空格上拆分一个字符串,但我需要忽略一些包含空格的复合关键字.例如,我有一个String如下,
String testCase = "The patient is currently being treated for Diabetes with Thiazide diuretics";
Run Code Online (Sandbox Code Playgroud)
我需要拆分字符串,但需要Thiazide diuretics作为一个整体复合表达式
String[] array = testCase.split(" ");
Run Code Online (Sandbox Code Playgroud)
结果必须如下:
Run Code Online (Sandbox Code Playgroud)The patient is currently being treated for Diabetes with Thiazide diuretics
怎么做 ?
java ×4
scala ×2
arraylist ×1
collections ×1
concurrency ×1
kotlin ×1
python ×1
sorting ×1
split ×1
string ×1
swing ×1
tensorflow ×1