python - 在 keras.fit_generator 训练期间冻结 model.predict() 结果
问题描述
我试图了解 fit_generator 的工作原理,但我遇到了问题。
使用“fit”功能,我在测试模型时有这个输出:
...翻转:原始:-0.027306326664984226 - 预测:[-0.01349835]
非翻转:原始:0.02869351301342249 - 预测:[0.01401607]
翻转:原始:-0.02869351301342249 - 预测:[-0.00223063]
非翻转:原始:0.027306326664984226 - 预测:[0.01300101] ...
但是使用 fit_generator 我有这个:
...
翻转:原始:-0.01975388266146183 - 预测:[0.01830903]
非翻转:原始:0.018212568247690797 - 预测:[0.01830903]
翻转:原始:-0.018212568247690797 - 预测:[0.01830903]
...
即所有图像的结果相同(我认为这是过度拟合)
为什么?
我的代码恰到好处:
def flip_sequence(self, images, steer):
complete_images = deque()
for image in images:
image = cv2.flip(image, 1)
complete_images.append(image)
if steer != 0.0:
steer = -steer
else:
steer = 0.0
return np.array(complete_images), steer
def EvalModel(self, model):
for i in range(0, 5):
data = np.load("{}/data_{}.npy".format(self._patch, i))
random.shuffle(data)
for image, _, speed_sequence, steer, throttle, brake in data:
image2, steer2 = self.flip_sequence(image, steer)
image = np.array(image).astype('float32')
image = image / 255
image2 = np.array(image2).astype('float32')
image2 = image2 / 255
image = np.expand_dims(image, axis=0)
image2 = np.expand_dims(image2, axis=0)
non_flipped_prediction = model.predict(image)[0][0]
flipped_prediction = model.predict(image2)[0][0]
print("NON-FLIPPED: ")
print(f"ORIGINAL: {steer} - PREDICTED: {non_flipped_prediction}")
print("FLIPPED: ")
print(f"ORIGINAL: {steer2} - PREDICTED: {flipped_prediction}")
def load_data(self, start, end):
Vehicle_steers = deque()
Vehicle_throttles = deque()
Vehicle_brakes = deque()
Radar_images = deque()
Road_images = deque()
for i in range(start, end + 1):
index = random.randint(start, end+1)
data = np.load("{}/data_{}.npy".format(self._patch, index))
random.shuffle(data)
if i % 10 == 0:
print(f"Loading {index} - {i}")
for image, road_image_sequence, speed_sequence, steer, throttle, brake in data:
image = np.array(image).astype('float32')
image = image / 255
Radar_images.append(image)
Vehicle_throttles.append(throttle)
Vehicle_brakes.append(brake)
Vehicle_steers.append(steer)
return np.array(Radar_images), np.array(Vehicle_steers), np.array(Vehicle_brakes), np.array(Vehicle_throttles)
data_loader = DataLoader("some_patch")
RADAR_IMAGES, VEHICLE_STEERS, VEHICLE_BRAKES, VEHICLE_THROTTLES = data_loader.load_data(0, 50)
RADAR_INPUT = keras.layers.Input(shape=(5, 100, 100, 3), name='image_input')
...
...
model.fit(RADAR_IMAGES,
[VEHICLE_STEERS, VEHICLE_BRAKES, VEHICLE_THROTTLES], epochs=5,
callbacks=[checkpoint], batch_size=16, verbose=1, validation_split=0.025)
和 fit_generator 的代码:
...
def load_data(self, start, end):
Vehicle_steers = deque()
Vehicle_throttles = deque()
Vehicle_brakes = deque()
Radar_images = deque()
Road_images = deque()
while True:
index = random.randint(start, end+1)
data = np.load("{}/data_{}.npy".format(self._patch, index))
for image, road_image_sequence, speed_sequence, steer, throttle, brake in data:
image = np.array(image).astype('float32')
image = image / 255
Radar_images.append(image)
Vehicle_throttles.append(throttle)
Vehicle_brakes.append(brake)
Vehicle_steers.append(steer)
if np.array(Radar_images).shape[0] >= 16:
yield [np.array(Radar_images)], [np.array(Vehicle_steers), np.array(Vehicle_brakes), np.array(Vehicle_throttles)]
Vehicle_steers.clear()
Vehicle_throttles.clear()
Vehicle_brakes.clear()
Radar_images.clear()
Road_images.clear()
...
model.fit_generator(data_loader.load_data(0, 50),
steps_per_epoch=5000//16, epochs=5, verbose=1)
解决方案
推荐阅读
- swiftui - SwiftUI 中的内容拥抱优先级行为
- c++ - 指针的常量引用
- java - Junit - 测试套件 - 文件中的类名
- php - 在 Woocommerce 的管理员编辑订单页面上显示每个特定订单的所有可用运输方式
- python - 我如何将相同的数据属性同化到个人 n 次
- reactjs - React + Flask-Socket.io:关闭浏览器时来自客户端的套接字断开事件延迟?
- c - 我需要一个解释:从不兼容的指针类型传递 'sscanf' 的参数 1
- javascript - 在 VS Code 中运行隔离的 JavaScript 命令(不是当前文件)
- android - 在单个活动应用程序中在片段之间进行通信并用新片段替换片段的正确方法
- javascript - 如何用js中的单个字符替换单个数字和两位数字?