This may not be the cleanest method, and I'm recalling the process mostly from memory, but the basic steps I used to fix this was to:
1) Boot off of the installation disc
2) Mount the partition holding the root partition on /mnt, e.g.:
mount -t ext4 /dev/sda1 /mnt
3) Enter an interactive shell with the mounted partition as root directory:
4) Change directory to /boot and review the file README.initrd for the official description of the initrd building process and usage. You should also review the man page for the mkinitrd command.
5) Create the initrd.gz image:
mkinitrd -c -f ext4 -r /dev/sda1 -m hv_vmbus:hv_storvsc:mbcache:jbd2:ext4 -u -o /boot/initrd.gz
6) Follow the instructions in /boot/README.initrd to edit /etc/lilo.conf and run lilo to set up and install the boot loader.
If you used a root filesystem other than ext4 or a partition other than /dev/sda1, you'll need to adjust the commands in steps #2 and #5. The hv_vmbus and hv_storvsc modules were the key to getting it working under Hyper-V while the mbcache, jbd2, and ext4 modules were required to use the generic kernel with the ext4 root filesystem. You can also try using the /usr/share/mkinitrd/mkinitrd_command_generator.sh script to automatically generate the command appropriate for you to use in step #5.