我正在研究回归问题。我的CNN训练的数据具有以下形状:每批 32x513x30 - 32个513x30 实例,然后是 4810 个批次。
我将这些批次保存在一个目录中,每个批次都命名为“ batch#number.npy”。
使用Python生成器时,我不断收到TensorFlow的警告:
警告:tensorflow:将生成器与
public void showImageNotification(RemoteMessage remoteMessage){ if (remoteMessage.getData().size() > 0) { Map<String, String> messageData = remoteMessage.getData(); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, CHANNEL_ID) .setContentText(messageData.get("text")) .setContentTitle(messageData.get("title")) .setSmallIcon(R.drawable.localplay_logo_notification) .setColorized(true) .setAutoCancel(true) .setContentIntent(pendingIntent); if (messageData.containsKey("image")) { Bitmap bitmap = getBitmapFromURL(messageData.get("image")); if (bitmap != null) { notificationBuilder.setLargeIcon(bitmap); notificationBuilder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(bitmap)); } } notificationManager.notify(121, notificationBuilder.build()); } } public Bitmap getBitmapFromURL(String strURL) { try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); return BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); return null; } }
一起使用 并且多个工作人员可能会复制您的数据。请考虑使用use_multiprocessing=True
类。
我想出了如何使用Python生成器加载它们。但是,在使用多处理时,建议使用Keras的Sequence类:https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence
不幸的是,那对我来说有点复杂。 这是我一直在使用的代码:
keras.utils.Sequence
我使用生成器的方式是否导致我的数据在训练期间重复?如果是这样,我如何将其转换为Sequence类?
谢谢。
答案 0 :(得分:0)
class MyBatchGenerator(Sequence):
def __init__(self, C):
self.C = C
def __len__(self):
return len(self.C)
def __getitem__(self, idx):
n = self.C[idx]
os.chdir('mydirectory/train')
placeholder = np.load('batch#' + str(n) + '.npy')
X = placeholder[:,:513,:]
Y1= placeholder[:,513:,:]
Y = X * Y1
X = X / normalization # normalize X
X = scale_mag*X.astype(np.float32)
Y = Y / normalization
Y = scale_mag*Y.astype(np.float32)
X = np.reshape(X,(32,513,30,1))
Y = np.reshape(Y,(32,513,30,1))
return (X, Y)