Ejemplo n.º 1
0
def emotions_train_tf(classifier: Type[AbstractClassifier],
                      model_path: str,
                      epochs: Optional[int] = None):
    filtered = []
    tracks = get_tracks(TRACKS_TYPE_SINGLE_EMOTION_ONLY)
    for _, track in tracks.iterrows():
        if os.path.isfile(
                get_single_track_features_path(
                    track[Column.YM_TRACK_ID.value])):
            filtered.append(track)
    tracks = pd.DataFrame(filtered, columns=tracks.columns)

    tracks[Column.EMOTIONS.value] = tracks[Column.EMOTIONS.value].apply(
        lambda x: x.split('|'))

    track_ids = tracks[Column.YM_TRACK_ID.value].tolist()
    labels = tracks.set_index([Column.YM_TRACK_ID.value
                               ]).to_dict('dict')[Column.EMOTIONS.value]

    model = classifier.build_model(N_FEATURES)
    classifier.train_model(model=model,
                           track_ids=track_ids,
                           labels=labels,
                           output_path=model_path,
                           epochs=epochs,
                           tracks_generator_class=TracksGenerator)
 def _on_init_end(self):
     self.track_ids_with_minute_indexes = []
     for track_id in self.track_ids:
         for minute_index in range(
                 len(np.load(get_single_track_features_path(track_id)))):
             self.track_ids_with_minute_indexes.append(
                 (track_id, minute_index))
    def __call__(self, sample: tuple[int, Any]) -> tuple[Tensor, Any]:
        track_id, label = sample
        if dump_file_exists(track_id, self.dump_dir):
            return torch.tensor(np.load(get_single_track_features_path(track_id))), label

        features = extract_features(track_id)
        save_single_track_features(track_id, features, self.dump_dir)
        if len(features) == 0:
            return torch.zeros((self.chunk_size, self.n_mels)), label

        return torch.tensor(features), label
Ejemplo n.º 4
0
def get_track_ids_and_labels():
    filtered = []
    tracks = get_tracks(TRACKS_TYPE_SINGLE_EMOTION_ONLY)
    for _, track in tracks.iterrows():
        if os.path.isfile(
                get_single_track_features_path(
                    track[Column.YM_TRACK_ID.value])):
            filtered.append(track)
    tracks = pd.DataFrame(filtered, columns=tracks.columns)

    tracks[Column.EMOTIONS.value] = tracks[Column.EMOTIONS.value].apply(
        lambda x: x.split('|'))

    track_ids = tracks[Column.YM_TRACK_ID.value].tolist()
    labels = tracks.set_index([Column.YM_TRACK_ID.value
                               ]).to_dict('dict')[Column.EMOTIONS.value]

    return track_ids, labels
    def _data_generation(
            self, batch_items: list[int]) -> tuple[np.ndarray, np.ndarray]:
        """
        X.shape: (n_samples, *dim)
        y.shape: (n_samples, len(label_names))
        :param batch_items:
        :return: X, y
        """

        X_list = []
        y_labels = []

        for track_id in batch_items:
            features = np.load(get_single_track_features_path(track_id))
            X_list.append(features[0])
            y_labels.append(self.labels[track_id])

        return np.array(X_list), self.mlb.transform(y_labels)