Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_40195168达庆意
keras
提交
4b74fc54
K
keras
项目概览
weixin_40195168达庆意
/
keras
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
keras
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4b74fc54
编写于
2月 28, 2018
作者:
F
Frédéric Branchaud-Charron
提交者:
François Chollet
2月 28, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix sequence bug (#9513)
* Made Sequence iterable * Made it python2 compliant
上级
7ef5244a
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
47 addition
and
4 deletion
+47
-4
keras/engine/training.py
keras/engine/training.py
+16
-4
keras/utils/data_utils.py
keras/utils/data_utils.py
+6
-0
tests/test_multiprocessing.py
tests/test_multiprocessing.py
+25
-0
未找到文件。
keras/engine/training.py
浏览文件 @
4b74fc54
...
...
@@ -2161,6 +2161,9 @@ class Model(Container):
wait_time
=
wait_time
)
val_enqueuer
.
start
(
workers
=
workers
,
max_queue_size
=
max_queue_size
)
validation_generator
=
val_enqueuer
.
get
()
else
:
if
isinstance
(
validation_data
,
Sequence
):
validation_generator
=
iter
(
validation_data
)
else
:
validation_generator
=
validation_data
else
:
...
...
@@ -2193,6 +2196,9 @@ class Model(Container):
wait_time
=
wait_time
)
enqueuer
.
start
(
workers
=
workers
,
max_queue_size
=
max_queue_size
)
output_generator
=
enqueuer
.
get
()
else
:
if
is_sequence
:
output_generator
=
iter
(
generator
)
else
:
output_generator
=
generator
...
...
@@ -2365,6 +2371,9 @@ class Model(Container):
wait_time
=
wait_time
)
enqueuer
.
start
(
workers
=
workers
,
max_queue_size
=
max_queue_size
)
output_generator
=
enqueuer
.
get
()
else
:
if
is_sequence
:
output_generator
=
iter
(
generator
)
else
:
output_generator
=
generator
...
...
@@ -2489,6 +2498,9 @@ class Model(Container):
wait_time
=
wait_time
)
enqueuer
.
start
(
workers
=
workers
,
max_queue_size
=
max_queue_size
)
output_generator
=
enqueuer
.
get
()
else
:
if
is_sequence
:
output_generator
=
iter
(
generator
)
else
:
output_generator
=
generator
...
...
keras/utils/data_utils.py
浏览文件 @
4b74fc54
...
...
@@ -366,6 +366,12 @@ class Sequence(object):
"""
pass
def
__iter__
(
self
):
"""Create an infinite generator that iterate over the Sequence."""
while
True
:
for
item
in
(
self
[
i
]
for
i
in
range
(
len
(
self
))):
yield
item
# Global variables to be shared across processes
_SHARED_SEQUENCES
=
{}
...
...
tests/test_multiprocessing.py
浏览文件 @
4b74fc54
...
...
@@ -6,12 +6,21 @@ import numpy as np
from
keras.models
import
Sequential
from
keras.layers.core
import
Dense
from
keras.utils.test_utils
import
keras_test
from
keras.utils
import
Sequence
STEPS_PER_EPOCH
=
100
STEPS
=
100
WORKERS
=
4
class
DummySequence
(
Sequence
):
def
__getitem__
(
self
,
idx
):
return
np
.
zeros
([
10
,
2
]),
np
.
ones
([
10
])
def
__len__
(
self
):
return
10
@
pytest
.
fixture
def
in_tmpdir
(
tmpdir
):
"""Runs a function in a temporary directory.
...
...
@@ -175,6 +184,22 @@ def test_multiprocessing_training():
workers
=
0
,
use_multiprocessing
=
False
)
# - For Sequence
model
.
fit_generator
(
DummySequence
(),
steps_per_epoch
=
STEPS_PER_EPOCH
,
validation_data
=
custom_generator
(
True
),
validation_steps
=
1
,
max_queue_size
=
10
,
workers
=
0
,
use_multiprocessing
=
True
)
model
.
fit_generator
(
DummySequence
(),
steps_per_epoch
=
STEPS_PER_EPOCH
,
validation_data
=
custom_generator
(
True
),
validation_steps
=
1
,
max_queue_size
=
10
,
workers
=
0
,
use_multiprocessing
=
False
)
# Test invalid use cases
def
invalid_generator
():
while
True
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录