سلام.
در تابع ImageDataGenerator میتونید از تابع دلخواه خودتون استفاده کنید. مثلا برای این که تصاویر رو بین -1 تا +1 نگاشت کنید میتونید از دستور زیر استفاده کنید:
from keras.preprocessing.image import ImageDataGenerator
def MyNorm(img):
img -= 128
img /=128
return img
train_datagen = ImageDataGenerator(preprocessing_function=MyNorm)
در مورد سوال دومتون: اگه یه مدلی با یه پیش پردازش خاصی ترین شده و شما میخواهید از اون مدل برای شرایط اولیه استفاده کنید باید پیشپردازش همون مدل رو اول انجام بدید و مهمه.
اگه بخواهید خودتون یه مدل رو از ابتدا ترین کنید (با وزنهای تصادفی) در این حالت پیشپردازش دلخواه خودتون رو میتونید داشته باشید. ولی در کل در ورودی دیتا رو توصیه میشه بین -1 تا +1 نگاشت کنید (یا حداقل از متوسطش کم کنید). متقارن بودن نسبی دیتا (وجود مقادیر مثبت و منفی در ورودی) معمولا باعث همگرایی سریعتر میشه (از آپدیت زیگ زاگی میتونه جلوگیری کنه). این که مقادیر ورودی هم بین -1 تا 1 باشه و خیلی بزرگ نباشه باعث پایداری بیشتر شبکه میتونه بشیه. (مقدار خروجی هر نورون مستقیما در آپدیت وزنهای خروجی از اون نورون تاثیر داره و اگه مقادیر زیادی داشته باشه میتونه باعث نوسنات در آپدیت بشه).