Update README.md
Browse files
README.md
CHANGED
|
@@ -30,7 +30,15 @@ There are many surf forecasting models available, including the WAVEWATCH model
|
|
| 30 |
|
| 31 |
### Data
|
| 32 |
|
| 33 |
-
The dataset for this task was created through a pipline that I programmed in python. The data consists of two functional blocks that were aquired online. The actual NOAA buoy data comes from the [Iowa State University Mesonet](https://mesonet.agron.iastate.edu/wx/afos/list.phtml?by=cccc&source=AKQ&pil=CWF&year=2025&month=9&day=15&drange=yes&year2=2025&month2=9&day2=24&view=grid&order=asc), they have an api that allows for previous days forecasts to read in as a text file. In order to generate human specific sounding forecast from this data I needed examples that could be combined with specific forecast dates. This data was aquired by scraping the forecast from a local surf shop located in Wrightsville Beach, North Carolina. This surf observation is compiled each day by a veteran surfer, and can be seen [here](https://wblivesurf.com/todays-surf/). Essentially I wrote a bot that retrieves these two pieces of information and combines it into a text file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
```{python}
|
| 36 |
instruction_text = (
|
|
@@ -49,4 +57,11 @@ The dataset for this task was created through a pipline that I programmed in pyt
|
|
| 49 |
```
|
| 50 |
Where the `prompt_text` is the specific text from the buoy data and the `examples_text` is a list of three output examples randomly sampled from the training set.
|
| 51 |
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
|
| 31 |
### Data
|
| 32 |
|
| 33 |
+
The dataset for this task was created through a pipline that I programmed in python. The data consists of two functional blocks that were aquired online. The actual NOAA buoy data comes from the [Iowa State University Mesonet](https://mesonet.agron.iastate.edu/wx/afos/list.phtml?by=cccc&source=AKQ&pil=CWF&year=2025&month=9&day=15&drange=yes&year2=2025&month2=9&day2=24&view=grid&order=asc), they have an api that allows for previous days forecasts to read in as a text file. In order to generate human specific sounding forecast from this data I needed examples that could be combined with specific forecast dates. This data was aquired by scraping the forecast from a local surf shop located in Wrightsville Beach, North Carolina. This surf observation is compiled each day by a veteran surfer, and can be seen [here](https://wblivesurf.com/todays-surf/). Essentially I wrote a bot that retrieves these two pieces of information and combines it into a text file.
|
| 34 |
+
|
| 35 |
+
Using the sklearn library I performed a train-test split prior to implementing any training pipeline. I used an 80/10/10 Train/Test/Validation Split. The validation data is unseen by the training at all points until final metrics are calculated.
|
| 36 |
+
|
| 37 |
+
The dataset can be found [Here](pfost-bit/surf_forecaster_dataset).
|
| 38 |
+
|
| 39 |
+
### Methodology
|
| 40 |
+
|
| 41 |
+
The training for this task has two distinct parts. The model is trained using in context learning with random sampling. When the model was trained, each prompt had three randomly selected examples from the training dataset as an input. The model was then asked to generate a response to this prompt, using the examples as a guide. Here is an example:
|
| 42 |
|
| 43 |
```{python}
|
| 44 |
instruction_text = (
|
|
|
|
| 57 |
```
|
| 58 |
Where the `prompt_text` is the specific text from the buoy data and the `examples_text` is a list of three output examples randomly sampled from the training set.
|
| 59 |
|
| 60 |
+
This was then passed to fine-tuning using the LoRA methodology. I wrote a python file leveraging the wandb library that swept over the different hyperparameters available in the LoRA training and saved the model with the best validation loss scores. In this case the best LoRA hyperparameters were as follows:
|
| 61 |
+
|
| 62 |
+
```{python}
|
| 63 |
+
learning_rate = 0.0003995209593890016
|
| 64 |
+
lora_alpha = 128
|
| 65 |
+
lora_dropout = .1
|
| 66 |
+
lora_r = 64
|
| 67 |
+
```
|