#python #tensorflow #keras #neural-network
#python #тензорный поток #keras #нейронная сеть
Вопрос:
Я пытаюсь проанализировать скриншот из нашей среды, чтобы создать бота.
Ввод: скриншот 1080×1920
Вывод: влево, вправо, вверх, вниз, x_click, y_click, LeftMouseIsPressed
def get_model():
model = Sequential()
model.add(Conv2D(32, kernel_size=(64, 64), strides=(1, 1),
activation='relu',
input_shape=(1080,1920,1)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(7, activation='softmax'))
model.compile(loss=categorical_crossentropy,
optimizer=SGD(lr=0.01),
metrics=['accuracy'])
return model
OOM when allocating tensor with shape[1,1888569,4096]
Вопрос: Есть ли что-то, что я могу сделать, чтобы уменьшить размер моего ввода? Как люди справляются с этой проблемой?
Ответ №1:
Вам нужно будет уменьшить разрешение вашего изображения, чтобы соответствовать объему памяти, который у вас есть. Допустим, вы уменьшаете размер изображения на 8.
from PIL import Image
im = Image.open("test.jpg") # 1080x1920 image 520K
foo = im.resize((135,240),Image.ANTIALIAS)
foo.save("test_135_240.jpg") #135x240 image 7.8K
Если у вас 1 М изображений, то это будет около 8 ГБ. Итак, вам нужно проверить, поместится ли это на вашей видеокарте. Не забывайте, что вам также понадобится место для преобразований.
Комментарии:
1. Почему бы и нет
tf.image.resize(image, (height, width))
? Тогда вы не добавляете другую зависимость2. Честно говоря, я не знал, что tensorflow включил это.
Ответ №2:
Вы можете использовать tf.keras.layers...Resizing
в качестве первого слоя, это уменьшит размер изображения:
tf.keras.layers.experimental.preprocessing.Resizing(
height, width
)
Уменьшите его, пока он не поместится в памяти.
Комментарии:
1. Именно то, что мне было нужно, спасибо! И хорошего Нового года 🙂