我正在构建一个模型,用于预测1148行160000列的数据,预测结果为1到9之间的数字。我之前在Keras中做过类似的事情,但现在在将代码转移到tensorflow.keras时遇到了麻烦。运行程序时会产生以下错误:
(1) 资源耗尽:在分配形状为(1148,1,15998,9)且类型为float的张量时发生00M错误……k:0/device:GPU:0 由分配器GPU_0_bfc引起…………..[[{{node conv1d/conv1d-0-0-TransposeNCHWToNWC-LayoutOptimizer}}]]
这是由以下代码引起的。看起来是内存问题,但我不知道为什么会出现内存问题。希望能得到一些建议。
num_classes=9y_train = to_categorical(y_train,num_classes)x_train = x_train.reshape((1148, 160000, 1))y_train = y_train.reshape((1148, 9))input_1 = tf.keras.layers.Input(shape=(160000,1))conv1 = tf.keras.layers.Conv1D(num_classes, kernel_size=3, activation='relu')(input_1)flatten_1 = tf.keras.layers.Flatten()(conv1)output_1 = tf.keras.layers.Dense(num_classes, activation='softmax')(flatten_1)model = tf.keras.models.Model(input_1, output_1)my_optimizer = tf.keras.optimizers.RMSprop()my_optimizer.lr = 0.02model.compile(optimizer=my_optimizer, loss='categorical_crossentropy', metrics=['accuracy'])model.fit(x_train, y_train, epochs=50, steps_per_epoch=20)predictions = model.predict(x_test)
编辑:模型摘要
层-输出形状-参数数
Input_1 (输入层) 无, 160000,1. 0 Conv1d (一维卷积层) 无,159998, 936 Flatten (扁平化层) 无,1439982. 0 Dense (全连接层) 无, 9. 12959847
总参数: 12,959,883 可训练参数 12,959,883
回答:
如果没有更多信息,很难给出具体的答案。
- 您使用的是什么硬件?有多少可用内存?
- 代码中的哪个位置出现了错误?
您可以尝试以下几种方法:
- 如果您还没有这样做,可以将32位浮点数改为16位浮点数(内存减少2倍)
- 通过在
model.fit
中添加batch_size=16
来减少批次大小(默认值为32)(内存减少2倍) - 如果这些还不够,您需要考虑对特征空间进行降维处理,因为您的特征空间维度非常高(160,000)