我正在使用 tensorflow 构建一个非常简单的 Keras 模型。当我启动它时,它因 OOM 异常而失败,因为它试图分配一个与整个数据集大小成比例的张量。这里会发生什么?
相关形状:
数据集形状:[60000, 28, 28, 1]
Batch_size(自动):10,
step_per_epoch:6000
错误消息:分配形状为 [60000,256,28,28] 和类型为 float 的张量时出现 OOM
注意:我没有使用顺序模型,因为稍后我将需要非顺序层。
张量流:1.12.0;Keras:2.1.6-tf
最小工作示例:
from tensorflow.keras import layers
import tensorflow as tf
import tensorflow.keras as keras
import numpy as np
def build_mnist_model(input_img):
conv1 = layers.Conv2D(256, (3,3), activation='relu', padding='same')(input_img)
conv2 = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(conv1)
return conv2
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()
x_train = np.expand_dims(x_train.astype('float32') / 255., -1)
x_test = np.expand_dims(x_test.astype('float32') / 255., -1)
print(x_train.shape)
print(x_test.shape)
input_img = keras.Input(shape = (28, 28, 1))
autoencoder = keras.Model(input_img, build_mnist_model(input_img))
autoencoder.compile(loss='mean_squared_error', optimizer = tf.train.AdamOptimizer(0.001))
autoencoder.fit(x_train, x_train,
epochs=50,
steps_per_epoch=int(int(x_train.shape[0])/10),
shuffle=True,
verbose=1,
validation_data=(x_test, x_test)
)
当我将模型定义为 keras.Sequential() 时,问题就消失了。
桃花长相依
繁花如伊
慕侠2389804
相关分类