python - 训练使用 tensorflow.keras.Model 和 keras 功能 API 设计的网络会导致 Python 崩溃
问题描述
-Keras 版本:2.3.1 -Tensorflow 版本:2.2.0 -OS:Windows 10 -运行在:CPU 处理器 Intel(R) Core(TM) i7-8850H -开发于:PyCharm -Python 版本:3.7
我已经尝试过训练使用 keras 功能 API 设计的网络,但是训练总是导致 python 崩溃并出现以下退出消息:
Process finished with exit code -1073740791 (0xC0000409)
未提供其他堆栈跟踪。下面是我尝试运行的代码的简化版本:
import scipy.io as io
import os
import numpy as np
from tensorflow.keras import layers, losses, Input
from tensorflow.keras.models import Model
directory = 'C:\\Dataset'
def simple_generator(dim1, dim2, dim3, batch_size=5):
while True:
samples = np.random.random_sample((batch_size, dim1, dim2, dim3))
targets = np.random.random_sample((batch_size, 3))
yield samples, targets
example_shape = (1100, 4096, 2)
train_gen = simple_generator(example_shape[0], example_shape[1], example_shape[2], batch_size=10)
val_gen = simple_generator(example_shape[0], example_shape[1], example_shape[2])
test_gen = simple_generator(example_shape[0], example_shape[1], example_shape[2])
input_tensor = Input(shape=example_shape)
preprocess = layers.Conv2D(32, 3, activation='relu')(input_tensor)
preprocess = layers.Conv2D(32, 3, activation='relu')(preprocess)
preprocess = layers.MaxPool2D(pool_size=(3, 3), strides=3)(preprocess)
""" Head 1 """
head_1 = layers.Conv2D(32, 3, activation='relu')(preprocess)
head_1 = layers.Conv2D(32, 3, activation='relu')(head_1)
head_1 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_1)
head_1 = layers.Conv2D(32, 3, activation='relu')(head_1)
head_1 = layers.Conv2D(32, 3, activation='relu')(head_1)
head_1 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_1)
head_1 = layers.Conv2D(16, 3, activation='relu')(head_1)
head_1 = layers.Conv2D(16, 3, activation='relu')(head_1)
head_1 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_1)
head_1 = layers.Dense(8, activation='relu')(head_1)
""" Head 2 """
head_2 = layers.Conv2D(32, 3, activation='relu')(preprocess)
head_2 = layers.Conv2D(32, 3, activation='relu')(head_2)
head_2 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_2)
head_2 = layers.Conv2D(32, 3, activation='relu')(head_2)
head_2 = layers.Conv2D(32, 3, activation='relu')(head_2)
head_2 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_2)
head_2 = layers.Conv2D(16, 3, activation='relu')(head_2)
head_2 = layers.Conv2D(16, 3, activation='relu')(head_2)
head_2 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_2)
head_2 = layers.Dense(8, activation='relu')(head_2)
""" Head 3 """
head_3 = layers.Conv2D(32, 3, activation='relu')(preprocess)
head_3 = layers.Conv2D(32, 3, activation='relu')(head_3)
head_3 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_3)
head_3 = layers.Conv2D(32, 3, activation='relu')(head_3)
head_3 = layers.Conv2D(32, 3, activation='relu')(head_3)
head_3 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_3)
head_3 = layers.Conv2D(16, 3, activation='relu')(head_3)
head_3 = layers.Conv2D(16, 3, activation='relu')(head_3)
head_3 = layers.MaxPool2D(pool_size=(3, 3), strides=3)(head_3)
head_3 = layers.Dense(8, activation='relu')(head_3)
concat_out = layers.Concatenate(axis=-1)([head_1, head_2, head_3])
concat_out = layers.Flatten()(concat_out)
output_tensor = layers.Dense(3)(concat_out)
model = Model(input_tensor, output_tensor)
model.compile(loss=losses.mean_absolute_error, optimizer='sgd')
model.summary()
history = model.fit(x=train_gen, steps_per_epoch=25, epochs=12, validation_data=val_gen, validation_steps=10, verbose=True)
model.save(directory + '\\divergent_network.h5')
evaluations = model.evaluate_generator(generator=test_gen, steps=20, verbose=True)
print(evaluations)
任何人都可以解释崩溃或提出任何潜在的解决方案吗?我在 Anaconda 环境中运行此代码,但是我尝试在基本的 python 虚拟环境中运行以查看它是否是 Anaconda 问题,但我发现两者之间没有区别。
解决方案
这似乎是我的 conda 环境的问题。我创建了一个新的“最低限度”环境,其中只有我需要的软件包,并且一切都清理干净了。我曾经这样做的信息可以在以下位置找到:
https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代